<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="./lib/crypto-js-3.1.9-1/crypto-js.js"></script>
</head>
<body>
    <input type="file" name="" id="imgfile">
    <iframe src=""></iframe>
    <div id="table"></div>
    <script>
        let base64 = '';
        document.getElementById('imgfile').onchange = function(){
            const fileReader = new FileReader()
            const fileName = this.files[0].name, fileSize = this.files[0].size
            fileReader.readAsDataURL(this.files[0]);
            fileReader.onload = function(){
                base64 = fileReader.result;
                document.getElementsByTagName('iframe')[0].src = base64
                const arr = base64.split(','), fileHeader = arr[0], files = AES_CBC_encrypt(arr[1])
                console.log(base64)
                console.log(fileHeader, files)
                upload({fileName, fileHeader, fileSize, files})
                console.log(dataURLtoFile(base64, fileName, fileSize))
                console.log(blobToFile(dataURLtoBlob(base64), fileName))
                //downloadFileByBase64(base64)
            }
        }

        //将base64转换为文件
        function dataURLtoFile(dataUrl, fileName, fileSize) {
            const arr = dataUrl.split(','), fileHeader = arr[0], mime = fileHeader.match(/:(.*?);/)[1],
                bs64Str = atob(arr[1]);
            let n = bs64Str.length, u8arr = new Uint8Array(n);
            while(n--){
                u8arr[n] = bs64Str.charCodeAt(n);
            }
            return new File([u8arr], fileName, {type:mime});
        }

        function dataURLtoBlob(dataUrl) {
            let arr = dataUrl.split(','),
                mime = arr[0].match(/:(.*?);/)[1],
                bs64Str = atob(arr[1]),
                n = bs64Str.length,
                u8arr = new Uint8Array(n);
            while (n--) {
                u8arr[n] = bs64Str.charCodeAt(n);
            }
            return new Blob([u8arr], { type: mime });
        }

        //将blob转换为file
        function blobToFile(theBlob, fileName){
            theBlob.lastModifiedDate = new Date();
            theBlob.name = fileName;
            return theBlob;
        }
        

        // 通过base64下载文件
        function downloadFile(url, name='untitled'){
            let a = document.createElement("a")
            a.setAttribute("href",url)
            a.setAttribute("download",name)
            a.setAttribute("target","_blank")
            let clickEvent = document.createEvent("MouseEvents")
            clickEvent.initEvent("click", true, true)
            a.dispatchEvent(clickEvent)
        }

        function downloadFileByBase64(base64, name){
            const myBlob = dataURLtoBlob(base64)
            const myUrl = URL.createObjectURL(myBlob)
            downloadFile(myUrl,name)
        }
        //

        // 加解密
        // 秘钥
        const ENCRYPT_KEY = {
            AES: {
                // 十六位十六进制数作为秘钥
                KEY: '1234567890123456',
                // 十六位十六进制数作为秘钥偏移量
                IV: '1234567890000000'
            }
        };
        // AES 加密，AES-128, AES-192, AES-256
        // AES-128: key和iv都是16个字节，16*8=128bit
        // AES-192: key和iv都是24个字节，24*8=128bit
        // AES-256: key和iv都是32个字节，32*8=128bit
        // iv 似乎一般都是纯数字
        // 例如：AES_encrypt_CBC('需要加密的内容', '1234567890123456', '1234567890654321');
        function AES_CBC_encrypt(message, key=ENCRYPT_KEY.AES.KEY, iv=ENCRYPT_KEY.AES.IV) {
            // utf8字符串—>WordArray对象，WordArray是一个保存32位整数的数组，相当于转成了二进制
            let keyHex = CryptoJS.enc.Utf8.parse(key); //
            let ivHex = CryptoJS.enc.Utf8.parse(iv);
            let messageHex = CryptoJS.enc.Utf8.parse(message);
            let encrypted = CryptoJS.AES.encrypt(messageHex, keyHex, {
                iv: ivHex,
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7
            });
            // 这里根据需求返回 base64Str 或 hexStr(解密时有小小差别)
            //return encrypted.toString();// base64结果
            return encrypted.ciphertext.toString().toUpperCase();   // 二进制结果
        }
        // AES CBC模式解密
        function AES_CBC_decrypt(messageBase64, key, iv) {
            key = key || ENCRYPT_KEY.AES.KEY;
            iv = iv || ENCRYPT_KEY.AES.IV;
            // 如果加密后没有转成base64,那么先要转成base64再传入
            let encryptedHexStr = CryptoJS.enc.Hex.parse(messageBase64);   // 从二进制文本转成二进制
            let encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);    // 转成base64
            let keyHex = CryptoJS.enc.Utf8.parse(key);
            let ivHex = CryptoJS.enc.Utf8.parse(iv);
            let decrypt = CryptoJS.AES.decrypt(encryptedBase64Str, keyHex, {
                iv: ivHex,
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7
            });
            let decryptedStr = CryptoJS.enc.Utf8.stringify(decrypt);
            return decryptedStr.toString();
        }
        // AES ECB模式加密，没有iv
        function AES_ECB_encrypt(message, key) {
            // utf8字符串—>WordArray对象，WordArray是一个保存32位整数的数组，相当于转成了二进制
            let keyHex = CryptoJS.enc.Utf8.parse(key); //
            let messageHex = CryptoJS.enc.Utf8.parse(message);
            let encrypted = CryptoJS.AES.encrypt(messageHex, keyHex, {
                mode: CryptoJS.mode.ECB,
                padding: CryptoJS.pad.Pkcs7
            });
            return encrypted.toString();// base64结果
            //return encrypted.ciphertext.toString();   // 二进制结果
        }
        // AES ECB模式解密
        function AES_ECB_decrypt(messageBase64, key) {
            key = key || ENCRYPT_KEY.AES.KEY;
            // 如果加密后没有转成base64,那么先要转成base64再传入
            //let encryptedHexStr = CryptoJS.enc.Hex.parse(messageBase64);   // 从二进制文本转成二进制
            //messageBase64 = CryptoJS.enc.Base64.stringify(encryptedHexStr);    // 转成base64
            let keyHex = CryptoJS.enc.Utf8.parse(key);
            let decrypt = CryptoJS.AES.decrypt(messageBase64, keyHex, {
                mode: CryptoJS.mode.ECB,
                padding: CryptoJS.pad.Pkcs7
            });
            let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
            return decryptedStr.toString();
        }

        function Encrypt(word){
            srcs = CryptoJS.enc.Utf8.parse(word);
            var encrypted = CryptoJS.AES.encrypt(srcs, ENCRYPT_KEY.AES.KEY, { iv: ENCRYPT_KEY.AES.IV, mode:CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});
            return encrypted.ciphertext.toString().toUpperCase();
        }

        function Decrypt(word){
            var encryptedHexStr = CryptoJS.enc.Hex.parse(word);
            var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
            var decrypt = CryptoJS.AES.decrypt(srcs, ENCRYPT_KEY.AES.KEY, { iv: ENCRYPT_KEY.AES.IV, mode:CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});
            var decryptedStr = decrypt.toString();
            return decryptedStr.toString();
        }

        //

        function upload(data) {
            $.ajax({
                url: '/attachment/save',
                type: 'post',
                data,
                success: function (result) {
                    getList()
                }
            })
        }
        
        function getList() {
            $.ajax({
                url: '/attachment/list',
                type: 'get',
                success: function (result) {
                    render(result)
                }
            })
        }

        function render(data) {
            let ul = `<ul>`
            ul += data.map((item, index) => {
                let base64 = /*aesDecrypt(*/item['fileHeader']/*)*/ + ',' + AES_CBC_decrypt(item['file'])
                const fileName = item['fileName']
                return `<li>
                            ${index}.
                            [<a href="/download?id=${item['id']}">${item['fileName']}<后端下载></a>]
                            [<a href="javascript: downloadFileByBase64('${base64}', '${fileName}');" download="${item['fileName']}">${item['fileName']}<前端下载></a>]
                            (<span>${item['fileSize']}Byte</span>)
                        </li>`
            })
            ul += `</ul>`
            $('#table').html(ul)
        }

        getList()

        function aesDecrypt(encrypted, key=ENCRYPT_KEY.AES.KEY, iv=ENCRYPT_KEY.AES.IV) {
            key = CryptoJS.enc.Latin1.parse(key);
            iv = CryptoJS.enc.Latin1.parse(iv);
            let decrypted = CryptoJS.AES.decrypt(encrypted, key, {
                iv: iv,
                padding: CryptoJS.pad.NoPadding
            });
            let content = CryptoJS.enc.Utf8.stringify(decrypted);
            return content;
        }
        console.log('DECRYPT', aesDecrypt('mnv1+JlUTuRnG+0dyaGIQ6mII9cr6eVR508AZn3zGSM=').length)
        console.log('test', AES_CBC_decrypt('NFSQfHAybXNl2zNbShcptXw1xS/pvGG+tJ/9d2PqmGRTu0xGDb4BAthA2/6RL4E0P7boNeqzXO5zFT+zi/njjw=='))
        console.log('encrypt', AES_CBC_encrypt('这是一个测试这是一个测试这是一个测试'))

        function decrypt(enc, key=ENCRYPT_KEY.AES.KEY, iv=ENCRYPT_KEY.AES.IV) {
            const encryptedHexStr = CryptoJS.enc.Hex.parse(enc);
            // 将密文转为Base64的字符串
            // 只有Base64类型的字符串密文才能对其进行解密
            const encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
            const decrypted1 = CryptoJS.AES.decrypt(encryptedBase64Str, CryptoJS.enc.Utf8.parse(key),
                {
                    iv: CryptoJS.enc.Utf8.parse(iv),
                    mode:CryptoJS.mode.CBC,
                    padding:CryptoJS.pad.Pkcs7
                });
            return CryptoJS.enc.Utf8.stringify(decrypted1).toString()
        }
        
        {
            var encryptedHexStr = CryptoJS.enc.Hex.parse("37999D4237A3D2701EB368EC53097EC963B5E128D13C8360051ECE37AF7D3A649626AA1D828B9B61813A7557C2C464CDFD913D84C8E507804B51B5904323C8BF");
            var enc = 'FB4391EF1A980F1FE51DB18344E7A4A9DE1E6DCAC7504C9E22577472829B1F6405499249AA7AB45EE3E4E411E69A6C013471BBBB9B25407DA9D7DDBB1CFA82CE81B2EE3EDC56F9C62308BC6F3029C46C94BEFA9A3B9EFB9F9E382CD486BD9FDF54875550BE9D51283509BD4C3039761A7371B9E4355F15788E89E94A0B3498396190E9FB09143FC9B6169E050F2839B80B95BE221A8F65C709B43656BC77A7DB1FB0A26E1FE3759B5A04782245AEB342F3EAB4D717F88961A9FF8119E13D95916770C4D04958EA775F40D027730FD38A79335B719CEC64B28CE53C7F6DAF735F49CD960521C6C6765C8F0F13B20BF2A2D506EEE70C503BE30EE43992935D832C4A5EF29B9947FF5CD5A9579D8DFB1BBD700D94F8792D6697A8B4D4BEAA0B33F4FC5EA25EAC35D128B98C036189780D2F34A0C8CCE87A744960C731BF6C58D9FF71D65EF07E807F9FA21326A31B119ED6EDD81D1BCACE0F087653A429EF4406511A1AFEA09EEBEBABDD5C966BE7FB6632C1B3F969ABEF4ED058B77349DDD7B95D071D64F4CA3D87990D45392CC1F7FFFCBCBF694C6E8F13520A6099DFBD5C795DB9EC0AE09D4DF3EDC0E48DDA2248A5BE8D5831F61216A5AE2014FD8A3F474C13CBED1C349BE9D79C99AC746AB734769F606DD1E31A14B36F1A5CA30C65ABE30338A9DCB271C0D0C6D759FCC749A31F554524E355B8CD385354C1F2BBA18CBF658CFD2FBF6EDE7519732C8FD2C91978F60A4BF69D769F4804D2AE4C4340C63A6BD11BC7D69B8803521B347BFA337E58E91C1A8E09792C655FECA93E1ED50EB78F02618097A8FA15738A509B099DCD0A16FD7B859F368296F6D5FFBA5030582CDD417BE0FDBAF9362FD5111DA0ED39495D0B99CE3C5013D08196A21F9F1628650E224D6FD6C01D7EA37772AD6A896F92342EFCAD2DED8E58272832A0E87B194036BB004E752A80390C270F0B64AA0A99B9091A1A588720300D4E3EE84B2ACCE7810CC907E9E09F3C6713B27915F16117A1EA1B2CD38398451601D91A4C647245CB64D2AC7E0C1FA9CA952A1E83DA96A6D1A0FE4A98464BBF3DE6B5FA56EA7EF38DFE1E54363750DD09AFF9B7813C7FCE0EC408BFAA33B2B2E1F508F8F05FF7FB985DEC5F9A6D5815D87137BFE20D523805A17FC6CF462838219BEA980B67CCFF5701482BF434ED2DCC9C59904EF450CFFA37A0B8B8EA8F841493247F51DE4A7B689C039F3AF3BC4C1063857BE9E7E19DE85AC380347B4D64253A317FC490DB309C2E6C162EC72FE36CB3BC94EF3B18C3612A68C8946F384D7609B3E1BD89445F1F3629A31773C002C3EB6E1D32D391BC055A11F2F96BC7B374F861227C805D39FB0ED80FD3649CE56F62B2E1FD0CA742230EB8AC78FDCC3D06AE721AB3CE3C737736F5637E0DF8DB847E84E7BB292CF6925996F7DFBAC6B010EE4E1C2E37F76B35572758833AFBD7F77C8528359CD8BE536D1B4EF7F15CBBB560D39B5BA282B9EF2D4362B2ED3200A77806C77A7AA8E7CDD184897FEFF06905FAD319779E66FECEC8D8F86100849684EA616D34E267927BB39B04CE793D6098FB5EC430F84A2DDB37784573245B4EAD54EE55FB86E209E8236592FB86AF5CC08F158FFE24A61442CE13966298271785929A4DCE243714F689D5C7DC1472914DBDB5C44112AEDB9F63C653A957FEF83FFAF437E388AEBF1BDF6AE9E7E03F31745B94158CA7C62FA46CB8205C209DB471AC1977F2D2A2D1402AFC03762F31EA51E534B6AD2F506040BFECBD54703CCB8B6F58C085A13A77390EC8C0A4114CF73ECF0A619AD5F72E2F5D4184D1D3BE0558BC190DCBC5D4B99C501E8C57427CEA13591259457180788D574992D23AF8A9A6535C24B6B9E82A2DFC2C42FB31AAFD651509F83000A8543C2D5C7F40DD715B9897455B8A6E307EF396E8CA9339CC5C0740721909276B3A127C6FFB37A1E55477A0A956F856B1FAECB38B5886D207D3A5C9DEE494A369A666F5D936EA4854E5F8C9C1FA8DDCB186D1BA225762109A01E1D6F6CB6FBEF682A95A316487C5D0027EEA7304CCD65519A18F7DF740B82975EC2533F1026D4614C0620907A97639790FAD03E01BD959E1F5FD4B79E8594893AF359106859BB1D86F0CAC7F9D7B00784ED025F0848936B7CD57A602E8C56F1D1B2DAE84B860F2DBD0AB83C79D44E8D5976D423F58C889673E0F19EC20B18F2557906F2267672EFC2AA6C56823963D18DA49F5DD7699464329ECCDDDFBFDC78D22E33E86C8DA5DB2727A75105D9B4EAF48F77E3ADC9B1BC9A8A4637EB86BE57A0D72EF637BA467B989DAEE013F30187E58D718A69E9CCCE526E7C1488DA2C143AF90C5F5F9B0BE3AE9FA0060383E9A9F4C6FDDC8E52AD01BD381A89AD0D853C8EE38A764E532DA838EA02C2040F874E70528BEDBAE5BFF48B3155EEB40B0B4993D3260F35EDC0FAE2B5FCEFD7863B10C1ED01284A3E583C7143AA7EB2039AD8627E466431631C683BFEC542C87662CE7DA1CDC53FD5C90E7686FED1FB65C886222848221F2395D69D84BAE4AE5541E14CEBF88FEF68EDF886B76EC005207438904D5AD880840B23E564DD1BA2E131FECC0B9FCEA4FB08EAF923C9F3EB6C572D9E93907C6C98FA0990F150A08555A2BA9255248B268AF421DD3865BFF5EEC45600ED920C58284B1593434B96790316B47D3EB020547590F0F623E86763E8A97DFA09B73B3D2E40C8738556E55B9093C31BBACC5C3A094DFBE4028D8D2C0908440EB5697943704A6718176D2E29E462251EA00D5BC004162E54331D40ED38360520917BFD7F67021351E487467069363D66D84FE7B04CA5AD7E16091F018953DEC91A4F39B88D31899927C056DD768190FDAF1CF67B5EFEAAF5F3CB80128EA0931FE4A55F828497A1C407756AC330F552FFF065AC795FCCCD3314E64D4C3E70AAA63AEF30173D23B348FAEA6CC30E5F509304ACA538F3A0EA4CF9D621AB35AFEA8CE4A6B83788D731954B77807AECB292536A0F577AC858212B907C86EA28F854129DEC5D57E3AAF1266FA22D1EE578F4A90DCA743A280BE6C2E374180C9270AC1B473718A67985B1A8D1689BB6455203C99582408F50B6BD4D3226D50B9E62355CFFE9DBBAF735A724E4D0A9C82A927854AAFC4ECF92010B1E90C55F3AF91A913F59F1EF95989D2E6464AF21922E3BCFB21C2FD45B8EE49DA5A26901547BC723B072E5E97BDF69616D4C52FE2CF44A53B90BF27587C5B7EE63C940A53B9A5BCE22EB7BE93BC65CAEF27AE3C9FB5B4BD584E513D4B4FBAA2C5CC651FAF74AE810543C59E69258617DAC0BD86B033D0C53251BEA81337E70979380E677DF024BA2BAB352C264A26144B0D852BC251428F10A027E76B807B4098AB48865F4EB614F5EDBBC3CCB50119171E19D894BB359D94ACE934E9B203C571769278E991CAEBB73A81B9DE73950DF89DCE8A467066F7DF7A3D3B096CB03AA28F972AC2411C162317802108AD8FE868DEBD8864CAA87AE0E8E82046E031A1C34237BF6FAE37F59F59176DD0C9463320176E6FD62D88926163529FEC37A822CCD938802C67ED30326BB7FD0D47DF0F57EC88DE830F61A521B630826A093789157E14BAD4E343CA5ACDD72C3C1F702E2EAE61A39C57D021C40F7C4EB544E47D6721B8D5F5DC360A4A68FEE65CA15DE93473F50822144DB93147188AFDF600703A03A692BE543EAD803835A8FEF01995F57306AC13511A509D6916BBF40DF53DAF1D8B66DA5888B697CE77CD3435CC2D9C28E40BB33E4D9E5142BD975F91841C32B7B10BA21FEEFAF75FD101F617C99EE93FBA856A03364E21A97B0A8EB8D6ABD3ED802DB739022CF861F4377E97111134E862EB95EE7E8438561538F0A8481C739E06C67175A36E709E56E91DC9656AC5F4495DAC5B232DBF5E251EEFEBFB1A684241AD4625195AD33164A4D6260668BE8A23D5EED536171557E033789F5D9D20B6FBE8C4A0CEA61D96097DE1241760ED11071299F7A8DCC457E5C1550D9CBA91AF97A24B7A194FA617E183909DEA8DE8525FCB4D748B15B3FD19FFA307AC93071F5AA557FF83C2EAE9BEDD76E1B8ABB97A74964A61A1FBC3B4FA8F3D364BB454F375C42C6A7075544A5796E1E6F8E340CF9705D98FF7F658FC6F363F294CCB1114A4A73A1BC9974E011ACB370DDA5954A8D087839FA88D17ABBFBA1CF764D3DD5E5A3A2D0C4411DB93D9BDCF7B5F31A343946AA7580B9718DC459CA7791E5C12D711EBCDCE67FFAF5DCCFA25FA9AC1DBDEC449FE770F7DD0E2D0274DE457D5992A173324B2C5B90DCCF16DE4758A9D71B19EB031873031AFFC87AD54A65FA75CF76656CB12DAA9B3A836BE6C7D52A4E227E51D5E3B1C116C3DF11E6F8C270256CD43E0B3E7D83A14EDEA718B1B837C2D077691FF93786A86F24FD3C591B590D7A499DEB7772211A9CE6A7B3BB6161EDE53CECA40375958BA7037DCCFC2BDA592C7CB96D3278CFE876856A23ADE732DE9ED88FCDDDCE4F0B5CCE7D34E12C063CAA0E30AC628484986455C7251A507D1C9565E02EA48EE7898DF2948515DF340909DE3C410751B850B3FAE0082B41FB9784684CD31980F0BEF29D7AFD1B3DF84373C5E5F2E894AA269D3BF2D723A6236FCD9D6DE6416915EA585AD2DB4821F279C82396D07CB6B640F5CDA04AF64279AB504A8D8B126FB394D5475FF87DE458CE18286043497E839D63B981385D97CC7FCABBF27A8DC3E98FC61B0E522FBF7167B02BF3A0A8167DA2B9EB72B5F970FACF9E5EFD5C844540C5F4B827985D9E554B3A5734CA2540B29AD8892A9E49872CA7630685418AD77D3807C44C5D8DF357C820DF82CFA68D324E5395A61C9BED5D70C923725554E3D787F3E57386FFAAC7CEB29FD76982F85CA551F137F9C3B0D25B6F3CC671EF41840F7DD515E72AF24B6CB5CF6C6AF547737506F1E42A56F1B0FE8E6AFBB04E45C70B64D9F269A32ACF18AB56A757C81A76FA07C826F2E1A17F510F4C5B006BF97C80D94785C48367F14B2B4DF7B4C413E1C1AA373CCCD1FBF5B015C417789BEF7A608926E4BAFE7DDA6A6F867CBF4350760F4CBC8B7A669BA0374F8FA6B96E15287B3A295DD7E7E65A2469951DBC123966DE0CC6CED8A9E4041F3D8B466996B27347FB87BE13270519EFDB82DA37015B22F926DB7310FCCCCE9D41E4FFEA4F0817E0F23B52BDD7C70130F4B8FC44C7387B9356F4DC219FE7DD2CD7EF0193D8A51ED53BEF1890EF70BE01C649721B1F8F4E088966E6D7E74422C36C1A3E4A964EAF6C021763DDB77C8BBBE75E1333E3E4AF635A8093047BB06221A3CC4064A9E63804851D1B25E8A1650A8A953F122DFFF2D71E66F3E9CAF48A5E2A2636A253AB648ABA06C89F0F65C2235517169548CED88826D1025260B834B53245CDA5C4DAC1B6E679A4C831BC9B2A4F42D9140C9B5ABF5F6BC432A3E731AB4D09974C94D505AE324F9FCACF5921BA6938F35E10E6F0B10EDCB215D1EE78FD256312A906AC0A55BA2CA5D42A7AA6380E1EE8EC4FCF5D9811B5FEFA0846E82D0D9CC79628F50E2FC28C4673C959B004F31C4F65124C038463D4DB8EC558EADE799BD1C6C19BDD9B2F3A29EB84757C4571B877A64CA68DB1ED9C8B9A9EA976561666765AB5029E6FE08F37F902CA05DCECAC37003342370BA72893195F3E0F4A5047915ECCF6B257291D03947803DA53393E24E0FD73CCBC8999660E5EAF0FCE26600CF4B7EE0ED8EDE93982C7D141FFC7D72F5D9DE195F8990DA7D70AEFA1A80D19F4213B4D7FA8A5ADD39BD90D0EE15FCFBD76A9F7F662CED05BA221570AADF0020C0B00E601DCC653BCC04A83C73FDDFE3B335606BA6322427C72F74216A9C301A9CBBFCC75249AF1782834B4BC108C7CBE89D76B8226302B8CCC5C1D3724B6805B438C689AC6AE200A12BF15411241E1D9EA70AE56EF50962A96CADC761EE0F4FDAC849A400CC9F3FD649DD94119BEB5F4ADAB6362FD42C5293E11D1531D35A64B6CF8C2B95B511BD515D0A8DA7015058EDABCF8C9228F3A66DB809400B1F6FF9FE37B46D7F27C7239E8AF015E0FE1585A4081607561970695A127029CFAF4E79BFF3672621235BC4CD9182BEAF7B471274421B086365175CB21794F377D679BFC41C86E33C8AF651CA69E69802326648B325A4D7269EF46180832E4D1BEC476BEE1D1A612A03C2E6231B3134364AC952F4DB84438DF2B03D2178BCF71BCF40121634C9C54D0523F28E06B1426C1D3EBA0165BDC1E9903FB468FEEAAB393EF87639DA52B2FF257D4D4C576257A7F420B3473F0BA43828E12D670572B61DFEA615625B7C6CE4938266864D756D17A9B3FDDC352ED871EB1745AAA3D9B9BE2F639DEE852FD8F318B20510D6B4E83190370D940B5AEE63FBA13CEC2762DADFF55F9AB6CDE89B38877AC367BEEC7C02E1095EB94EF98D7E742B148F6EBFE78943C1A3FA3F4A965E9BE264852901B25CC0CB8D3EBCADFBC080148426D5285F2C5920196927714B9CA05BACB715AC0073B77A80DE3311BD1C103F4A6F6BF31B44417B4EC39C5FF834378FF39863DE1EF2DC052330900BE16E70DC7F88489FEF42A86A44CBB73A4A434230C235CB1D93E899376E305637934F2E6E330F8EFD3EF5E11E6872D20C981E3329AF0374B3097C84878C5EEEE0BB3D324FC919CEBC7AC729C1CF0CA529E57852F5BCFC795D36401BF885FD32D64AE70449FF9EA4EB7A5423A546C35BF329D5C2ED841F0BCE1C7ADF34656D8DA15A24FFF7649BDF8B738FE029D77E44D5D8B3F7CC5E480083760CA79516C5A0362021C27C60F7D4E3B97A265A980871A1816FC7BA3A0AF6B3DAD0195E990A4EDC3424DE9FACBAD552ECF3EE1728D877A9D50729A603B3C3FF67D79BE4EBD3A75B64944017A68146F30BDDA03D85D396C8F10CC6A4759AB6ADE094CA2C946B7A11EA6E9F2AFD58930EE7BDCFC9B11D70D32FAA3B182AB7323177CF32E0C0DAE68BDF96992399BF9B6D421A101CDD8F23777D6AB71135DA087C06A1B87969A2B697D6835EB10130D7A1ABEEC7C393B1436D05D96935AE4105A0C4456307520BD4B3C3E6DA5695E0A9476647A19BC3BFD43143452FBFF8E6028DB523E3777769ED8A7B3B8D1FB88DAE5686332975A21F7C76A66CD79D6DD80811D8F2E196DCD38A548AFAC1E42837679D5635B163A48EDE074578976059B66866A49D7D4B0EA3B33D928FD104DFCBE6A56D4AF3BDB76B53E3CECC9015F2FB23FCF4C2988A09DADD47E2907461E8C2E0B1F894A04AD703E7CE5827C2500F52E5CB4BEC5D438F1DA69A51F1BEB9C8C164C3CAFF3F9E53B69D35F76AA51947DB0C345F881DA5BD4F663B4C5E98D576A56B348D18FFBF60B6E7184514977D59CCEF4A47DF3A5CB604F2CDBD31F8EC89B4495C1391A39350BCDD826E913A62A927A85DA1CC96215716031756A92920E5F7BA9A649E33EFDE18A49E43C2AF5F20E73D572F169AFD09A23E24653CD9125A272964B61600CD8DDA8E2ECBB0DEB85558520DCA9CF5B5C9096CF114B566B53AF15320A1659819C6A83C07616F09ADEDB676ED4801F66AD92FCF4DF39900DA44F7B93FCA92C443D11E5300BD9A1A44A50B9A6784F9EC67F1A29E41337D4C8A7D18D7A94F51D1942CBAB7078BE4FDDAD820A75F862D87BB8FDC4A3DEC5B19AB007625AD78A205734218604DC04690F5F70151190488A7ED4CBA92F2B5DDCAD6FE57D7E3F2A9B5F96982E726671ABAF796331ECCC65FFE010670F20ADD902F5792C1255E57EF41620FED99D23BCE7AA0CF451721481905C7D50179A39179398488915489D37F2E778E0C6E5ABAF158EBEBE79521D127BBE2A5FE80B5CB6DB22AB38EB4FE76B1CC02C5A4D39B34262305D27083EE34D302A130CDE48A7AA1B002BCA57397875BE937FFC3E2CD4DF0041E8BEC1511415EA28E3E54D6E50F74A4B6A5DAAD2D6023BFA47B8D289AA8A13FF4B2BD22EEE55EEEECD7F70A3EEBD85781871FF6C702DDD2FDAA84EA790E9D41C116A12A3C38C2DF8BBB1CFF49F8BF97E93BD2443578EA253F4FB9C3793AAD37AF9118188B07A2FACE2CAAFE063CCF62AAEB5FE83FA83A50C28A3D6C835B07AF3DFAB3C5012414969922830E4262D81885C5342639FE1F5436365B0A5B6B06925AA7FCCFDCEC1DFB53B4508CB204A2806900C0BBD4BA7049EF8E5777506AE8829E17D5B0386537DC48B273E9CDFC5342F700F1E95F8246D3ED9CADB41AFD11C0207EDF958D1BE543E5E2F8E76AC79CEFCD90BAA6C32ABB6F13AD531A7AA0105F88F3AD3DEA89B6CA59BFDB93D6417DCB0E8A48A58CB9A480024C1ABB6B4D42E609B1AD025AC6CB56D44646DED76587519509B55B2D26709EE8E1334AEF4DBDBEE777F890F78BAFD5D9DDA7F27C95CA90FC8012DCE3E0FE08CC7E8783B153287D3EF80AA34406C4CA7C4CEA7FD6DED2685118CAB8EDDE5F182D6C7D81F9AFCAC34E1551CF75E7E1D203637A03209A442C3092C7504F5DCF3DF35FEECCB7DA35C96B788829A709A810EBC92EEC4BE508AFD9BBC5AE143FD790840FC21B60822306CBD9D67D5DFE958FEEE72EC31FC81CCF1230EBA4F7FC7BD38C2B46BF2DCA379AB483674B1F9CF188AC632FD4E9EEE79023B6B2B40CA0FF91E3EAC6DEE2305CD89E751B0CBB16ACD444C9BB11DF6B24CDDABBB0830AEA77C6B8A8899B1F80C324DE7A3B2C6FB21EFAD9EA83CE2E4E11D260B637A1E75FB15743729FE2A5B307811A4216251377E05B063ED2F8C110775E4D7778E9DA2B94AF8BC840649CB11A82B0E38CF1F8DDA8019A69EB08BDC482279E583F865A61518212D76A606968EACB1DB7B0622EDACDB59B95FB4D33F5BDE574981EF18581940F53F9CBD4FDAA29F6958DBA5A60BD6D3985EA1C15CF889891B2DA4CEFABDC508314A641886C36FDB97C25032411886020687174D696EE3834169C6B49CFF1CF3897A270589BCA60E8B3136455B7C352788BDE537CDCC33528BE0534455F82D5340D1D46014CC5828DC583405C703C1D7514AFA4209E9C89D6B5CC01E0E74E321B4332E8DB6F1F4234D6C3BB441FDBD1835018C33820AC55EB345299B9A6EE12F94E181D38B988B3855AB1873B9687C2A1BC0A740B6F03078DE19A105286B4608047CD4487E9C5191151563A03F3C0AA1036E12C3593F74F807E9D286250787AA692717190B4F5E62C9A9AA42686C9BBCF6D19770D259B9002F1EB8851264E29B8A7A5F99E8B9EFCA357DB18EF5067E16F12A6C214E0210B742AFF4298D1884A0685CA2717B91FC0BB48907B7220EE45BB9649B2C31025CF7A29ADDAB93378C7023671C2524610610221A45BEDE296ECED1E85F85F0E9FFF90324CF2742D4DB5BA015AC7194D1762811CB182F0FA0C64B2F6D0C526FC1F7F1EEC7DFF8CB9F1FC78C601B1FBE39B9742C864D161026DB3B2B3B9F33B08B3688FC2B2748EF48B3AB7197B00B22D228E8582732818DDD969E00EFADB3E563F6A79BF3046238058BEFF0BF05970BED9B103D0A658F2CC3BFC189DFD733496A5586841F08F0E603945FD5793FEBBE36A1B50B1D7FEA4D50D18AD96D4FBD5F9639B252596C5A8C3EBF5165BD2DF92EB52F61B9C1D604F0105F8D1896242CD97DDCADBC1008FA8255E8D1A6C74FF4F1C6986693E9A8861296DC163C064814F49886235075862EE8F05FE2E45EB2EB6BA5641F3C4829FD424E97E84394D3B4741904DF5949301C5E53A7DA223436664AABFC30F120EB191D5E4BAE65903590EED95FF6C5D4FDB9C8E2E0DA37D266563A395E7F738F60465A9981172D86092CC01FB0A2C81D0733528F94869FCA9D7372EBD04B978F90A8616EC439629CB9C6789D9B7EDB20C7B6F8E772DD2469FE91277C63560DFE5E1D64DFC6E83AACEEBA039C656FC85786A69734806B98DD3F2C6B216DA9A7279780773CE196F3A441F3F7C47C3879404CB68601A0F606832A9A8D51866991617071CA1544075D67A1E7F79A891E85A90BFB55C270A462185050D316EE961D1B8157137042261BC6C57991E161C95896EA52C51ED32E7699463D69E6F34D70C5EB4F64A9585A9E033B6384DEB4851B49BD0552404AE9CEAD514EB9F2CCDC743C1AEE1ADA29FA4E0029D04AB005F2B70EA493CDBC4C252500C01C7DAFE74BDCABA13EF2FE5DCC021720CB9A63355224FD8D7F57ED979DEF8AB1C3A53DDC2AAE746979490FD7CFA1AEC0687E4ED5BF5D119E37DFF824F4351D878A0B22F214267B91EC1E4897DE837BD8D0D29F9199CF415F68499C90997C121961C0CC6C328D744E8E397474FB8E9B7C09EB9B529571C9F8A6D573B382A365CDEE6D7D548D653F808402C538E9EC03C4DC8A91716451FFB3973255B3916D960D6737E5E2BD5EB8892497685E155B923C6BF19F45E5ED91A07C77603150FBE72F31F52CE517F49FFD3E944E833B0C79D06980D67EBF9CB43F437CBA5D73E27D4837EF400E11DBE895D2BFBC0F7988AA452826822815EFBAA43E97D9D64E0CA1C26F9CC1004F19818837CF33781B6519089933961EA34D4A34F077390E94C4F27EAD275C03734F919FCDD0A0E5CD3FD00FA31F997999F30D2D9A5A2E51F9042232B9A553A0E4CF323BF79C97C60E833429BCDEBDAC9C226D9C4AD0D25D48E01500100C75E21231E5696F5D0BFEE725238ED9439CB2DB4A01F6EB1C39A62541A5912F1EF7F52973F7FEF4A8C5634323D2E8101CCE6F21E5F8A2DC4CA711B8920F605C56A2833AB978D3960337D72C6A0238413FE9FFDD6741814CEEF652CE2FBB340EAD911AB9269F2DE1CDC644BF74CFDC9A6302EA84064EDA04CFB3D7BAF9B2E7BEED4DF42F6140C360C302716379A4C2B19C40DA5194B4436CAF035D2BB0830A35055D5DA84C134EC77FD81B40DD1E4086F1B9172C4C47413F9A23DD8B0561F2F1A8E7124A0212149C043C7F8F88EA124DC20753BCAEA0CA88AAA0F3FAF84EFBE000EDAFB36AB84D01B523D0D17BBCF7CC566A7FF97E041570782F69949BF9B2A9FAF350A92C3616417596AF09160D3AB43D0D0DAF1A90CD6C050ED7C224B93F6198BAB53909688875EA322C2F2B6C58D9C92135A4C6F01761BD23D1AF5FB9B345D8B5C606B35E3CC7C1D663AC641B6889EA36AF9110D5D015CECE9B332D65E122D788E0542319CD5BDCCD90F1CD53423CD50869A87DCAD4D42CCE9C38F0A33917AAA82C3245EFA5485AFB9DB23FFDF89218D74B378790FCE2980D591101F34AB1CD0965298F4E01C3AAB250BE3829A9D3B2123358360879C70A0B32928008CE901EE151CD324B315058400037A7B2DD04FAB1C2ECA1A588C7BADEBDF2F6682452F6727CB53B923EB9F0166F4EDAD3457EFF02FD8181F8024A113B75B51E960AE14A68CB3FBA52B5F2D8DC45440023E6ED31E35A631B198B7B47786CEDB8CBFAAA353EB411F57718D0FF965C5B279A620BD3041497B55807A22A662062B96F51F9A354C1CD6FCA4642970B2C1CA3F365A49240CAC947F83BE6B6D06188681431DDF8F67FCD4CD139D52D8AC73C7196AE00794A2FD5CE260055F3D8C2DED1F6E67C43464E781C40A94E4299F38CFD6175667E541AF30F36F297F4B0EBD3C3A82177081E551E7B9C7E2B471E14AF31CAD150C867DE509443F0E72D55E529AA42B9B8A37C7CBD15470185BAE1341903231C636FE30EB59F37A2CDBA1B77EADA58D0E88BE332BB24B864D896F65C89723AD541051E87139146533EB4B64A0497588FB08D30B00CCDA8DB7537888798415C88C2A50CF339E2BB25765F09067F63771A42C05CFA6B5849AB229C9A23AEE4BB0384591DAAFB641B9535AEB36A064EF6906DDF9113A34FC9DB2FD9FEC0B2A3918D391F98861801DC7C321DA046C06D73A0F24EA86EC0C29E0DB1FEEB4382D7014F8009BF5C00AE57722E880BD0111D0473FD324FC5CA76B362CA7DF67F4D3EEEF98C336D63187B088B084BA28E0117C2AF2E7EFA0BBA3D0435366ABE59B0CA9A05C91F268F66069CEDB5F896F0B6B88B7EBC9097FEEB9FD896A8FC537EAEF38FD76731795D9227060726794508FC0EC399FF9BA399BEF95CFB49FE97CE76392C73AAE96B908BA0E7587BCDEC0AF40578F9BFB65A9E15BE1B8410F59450C2457C5D388BA3F8E635B01B9550AC2B92F3FB6756DC50A3A12E420AD7A549A1834111049971B05FDA5591D53CEC98709EF8FDFDC203B552705FE8BE66E8F45D6F5BE498C8382AB55A20F8930FF93313E43F13D68D979FA1FA952733FEB637A0E707C16E31BD6A96EFCFB956940B826FE5A85C3FE2414E3717BFC488038E673653299D99C22F20B9A4AB65DD7087D9BC57123813C780EF0CECCED8869DAC0116B2DA7041BB523DFC5F779162399174423F32FB85B0629EA5C4A83FAD3BDF557206C9C5DD4BAF06209D1592D27354AE73467DC608DB93438BABFFA78A2FBDB78273D9207FCBD892D7BB69659E2F5132001B7E1F0DD3F9B3B3B8266BD7898912C237E6C261A532F93C4E78CB48197946CE76F4FAB032EBD6032E8AE29F27C3F6E361B043A005086F9501E0762616C1935EAD240A637D56A00BA715A609E09F5A3ADF1FD31B156F7C6A104F88D8433C47808D8968E5EEBA256E101AE342D4CC5984E1F2096FEAEF4C0780E8CFE79BDAA9746322492BEC85688AE04212091E495461FFBD46E12E0BD0567098B4E47A6C854DA13A16443F934A49659DCFB314130C96DE02C1C78E6DC41751FE52FB8E90F8C4C57168E0DA4AFF84FAE4DAB76E8B86B367E4D9F5A7D58450DA9D0CB406058FA79D940F150B3E1C78F46AD564F01967DD133423A17891DE84B87938230A1E7FAFFC1AA7B16D2C911DF805FAF8614D6796809AC5E646A0363C8585B2E4A220A36CED16B569B25CCEF0459F1D105AE578BA8EBB41AD1AFFDC0CE91597EDB06052B85BFE71BCE2B4B6BA4998AADBCE8571A86DDBE1ADF4B31426343BE35D290FC36134ED5F7E0403DD5C3BA91D73C4BAE3BC8818329DBB08D29CE18B273F1AF43F170145568785C66F60631A1C08FE7E49B5180F87C911BE92B139A3B387B928D26B977EE50DDF5968FB72EC78EE8C5217258C27FF5DBB78319B1C1537ED023C6A2F1EF1D9B61137932E38B0610F4FFA1A5CC6D81A680561CA3AA84C7E48B9F286E4059F4592B264E6274DF486E6C95F9E4E637049CDB519E6DAA103CFF332ACFAB81619513D7FFEDC9E91B08FF30AA9BE152288B2C849FED19D29F7A4F3DD8D738E9330C09CACC56429F245BCFACBF4BE8637444CCE0B272A562203BCDA92B6E290DB72084081EE1F7C8AD8903CE281B3DF1C4249FE2EB5A738D7D80E822B8523EBE9E1B94450B66761AA9D3BD8AF656842DEC2716C95C8C998892B0D6323EFE09A052A73E54E0F97513763D66CA585F8E6E00ABDBCA96F2BAFDA455B6025206B7A784704CE90B00B19BB94F0B70310CF3AB027BCA5DAB335BC6594761B67E5CD90A284993CDD81B71339A8CD5D87B7691342EE945DBF22A01836B8D14589360297ACF342C76E01D3876C477CF2FD5E1361BDB5FC0230CB01F81DF40E2102E5D1DCCABDDE2CD8FC3EEBD971BA8E5F37355DC25B1F103F5248ED4AEF7ACB4C24083FBBF613681A1E8A3385339CA2248E854B4662F0ABC2A76FC8AB0CFD317BF0E4B6C274275F06F598E68706CCA0F500BCB827F4AEC4C313D270D7723C47ED08AA0861514E2343F9D2816D5988EDD5EBDE300EF1427F51D2775E99D1A069E8615D39E9FACB2AB98B5AFB06AD3146D72E137A0E7C844D71F6CDDC152DB9585D7CE8638AED8326E932380C3CEB041C7DDD176E7405D58BD680300120D2AE071FA97FF53AAE8382C0056FB73FC7FF132426AD518BA68A38FAAF6F3470E55F36EEF8BA61891C986C29CE843634B3425643804E8693583BB707263B7234C80AA6711EC54EAE33A84EF9C1F063EC08E8E1225A56138045C90C6DDFC565F33FCE496EB2ED92CEF7D755E9E8ABCC7AE5247DC9E123CB2A13A4D975E802043AB740ABB6203F6259EE813A4570C6EF9E85358E92EA2D63E24C7B207C969AEC336849CD0955F8C6911A11084A19E7156CCB238C55B0E11D1747FFE286B7C31E5D6D55F76A296C36B2596089373E6FCD2D3F2DE925D7E8C2E41A29B2627F1D68E7C2D6952B81EF4C1FD831BAB95DA634A7FCE6B679694F0023F050A4382DB0CEEF258718D8B3B4A207D1D96C47B725829EEE742DDE51CA374AB799F1C33D267E97B5012F8F2C65C6656F93B792572F03F5B0712A10D6A51722EA6575B0BDBCD60F43C2E287C274002B55557853D9E4F99F7EC2F2F6195E75ECA2E3443BD867880FE6351B894AD96DF3BAC873A4978CA7F3D4CFA3D5C7F864C13D6C95F138E1AF36436FC6A75A77082964FB7185855966BFFD10C835B6DA935429B1615033340370531FC8BEA9C6879B4ECA23015A433B5CD0B9ACB319540C07FE9FD58CC0835D5A5B51D6218A76F77AFCB9C113F6A51AF27E628604FB1B458897DF3831359B61CAB531334C9A23C31BDFD458D3F2421230506DA683E187E2752B085FF724906270CAF13EF7BE694D7E99E44116F8E42663C6CB4FF9CE88C471BE7EA040ACEB33D63EFB99351A1A7174CE4DA183BF9D2E3C69FAB93ACFAEB23CF22EFFE2CF5CB9B2F19AE8A983B041A9A95D76D12AC91281513E3D686CF051C21693302457417B3349A6DDB38C60DB2884F83BAB8C0243B2959B3CAC5BBDFA7E09B1C9D4116F4042510EC5B1C4078DB98D372AB98C4E753F61CC3972AC90256A9F12AFA73969E800CB4C7752FB8A5949513C498A92ACB9C355060EB8088E16E6E675D9527FCC537A03D72814075E6556E4F2E7020CD98D8F560C2C5604F417A9C6391B86430A60EAC7FAECB41EE82DF90E508D64A49CC02921E4E685AB00D144438106C048435E1E7A46ADA581AAE6102926ED6B7516E27862D07468DAADCE14B48CE2C7BBBA3454D60EF3825F6EF719540B970AC72B9945E9FFC9BA03E812748E7C9F5583F7BBC359A20139B93C51C6F0F2A6EAF073DFB22A2BE8515FAE6A04F8E1427A281FE8831746C98FC154EBFFE1AF929CC6E27896121EE47F76525116AEC9B78469989198E07E8404B2F0CC480C16E061D535A79ECE5EFFC8A9A57B9F4BF7EF58BBDB1F5039754660AB839BBCC1BE787E71A4F61919C2C11F59F4E234E393403778F16C75CE304A4C16301BE95B02C4C1B2E405B540A384C8F4BC0A2A18236B0BA349078D5EE5F1205FF2AFACC77B36A78321081CA3D9018E032D469B7DB40D1A05E4EB62DFB4C6E29FE2D36D7235A1DB9DE29705E51BBEFB307CD133F5D67FF0310A3904DBF95A024F305050669334D615BAD364AE0B476896DF1B4BA965AA44ED3EACA3F7E614B6092242C9C2CDF34DD17F6B16280F3B4E5C0D026AD33F97B192C623267CD610D63D5291264A3A649BAAFDB5200792E5F6C226CDF8672298B3197712A37E0006748AE2687FF49280FB019520E05DC9F08D140D56B15D3CFB530464998D80E0DE6492AFE3891746957635DE6D6BD26CFB8584FBFCE19C27A37CA0616663FE37EB91044FDBC13FCA85C6638153B2E7A598721A761626497BC9DBDC13302DFE5870A6D896E3B102607707C0DE99E66D26A9D33BE3913CCE28DF939566588222818CF979200C51EE94C4E88D63D51670833ABBA3E2D20060827248BB3F0478DCC7D935029B91B8DB1A57592B6B61A9FDED119E9AFB6DE5EDCE268DA6CB57F53C2BEA463E403115FA2E03BA2AE07343D40AC715721FE90E51D2E01562CA94510B06C7D010C06335C1E845F32893F8251B507822588B081F35B9E12DE0882E65662C3EF6AA198CDB220C4DC794BC07A6787241DFC5BE9F20D5B8BF845B2410AF39106CC049567B08A91153FBE14E54AFA1453D1C0BAC0D160341A90B757A71A0795E1BDFCC5915974939168A7CFACCF35173C27F0367B8F618ABDA4EFEA49CA41B40C6E9ED4820D4C0AF32091EDEAD4615F9B04B5A85F250FF4F0BB0FF571FF60500B8904EE40C0079B7FBCB628FBBD9EE031972D49A68A8EBCE8EE69EDE3556E50ADC6AD31C3CA2482964FEAC92326699964E3E1D1258A3A2B6FC7B2EC99AD127BDA69B54263663375A29186CAD51AD527E7F2D9ABD304DAA37A233257C1D4DF85DF196CE502722CC10B8338A8E9DF568944B0114BB01288B43E6589E66D27E2EC28E259DB3D3345E9F5A9018E969E628733B34B4F814092B7AA974DBF172500373F08293B9AD6C595A25D2BF191F1A1570BB0F81681FFFD63D7990A7E23166A0AB61DF37311C549816BA00353A029E9D647F9D36C69FC7A1463C9AC8F60C108BDA699E8A35EC4E6F48EB4E63CF2F415DD8314A9ECF6117820E6994478412DC37E65E4A37D09DB9C7049B45668F9581DB3CB9D42D9F8767586D7F6873412F0221313E8F886778B150BFF87344B0BC73757972C4F0FE45B470836B5E0038CA7287B9F860EAB9B60F27AFAD66C389A38CDBC789758FA5F0EB29922DD071372D2C46848506721F184D0DA91A09C066B76880E650327597386632E0CA1398B2DC072A5AC587337A2CED9192EE33F4D7AEEACD19AEAB121B93676B5548A2AA4AC341E4600995364986BE9E6194BFB470EEE3F07CC12FBA9FF72761674F66D57433104CF387336B3B6410D6A555C070B060696DA1CABEB2B217C9B0C5665212A949C73C1DE67E14735491C8AC163AA1DD3C581288C3F4626CE2B97B6243D6B8CBB629DE86BEC8D2733904CC59D34BE5EC89F3107C528BBC690343085595D84145D101445B42968EB89C41000ACF2CF037F3CB9FAD1C5045D8A42C213B386F90BFA5E1FD79152A940732A2E82E242F2A90ED63D9CA0424FE21407A79899FF5CB33BC77DCEC354E9D79B54FBF2D91951222FFE887AD77AC5FFD91C04D5263C2D1EECD1C0945B18FA1FF7084E1EA36FD0A98D50221D1C5DC5461F8B2FFB218742AF523BBECB55500371F20046EF34A33112BD71E23D86DF49699E01FEA2A1866EE99865CB75B2C94022D3C5FFDEF30EA0CA5447FECA1018AF7163669FC03515386846418E6FAAB9B7CEFC1A68C5E39BB969527BDEF83B0E048BF7D902DF7ACE6FEAC7D4EEEFFA0BF6EB48B286CA240962381DD0BBFCCB78CA16455224E68C784FF28E2063DD7E68DBF7AFB5EF01D1A49144C5A2EDA2F50033C21E80BD9BC952686486D8A142466211B566E03803AD2AC3B110998333BEE2354506C8BF5DB44C5CADCFF4A5A91F5382ABB9DC835470F429A87D8DE3C67B3E31E495F3DEF7793BD4B3F3A1946C11E797AA78EA97FE79B251075F2730856D651BB80DEFE94745481FD237ED78DEB9F2053B235D8AF63691F438B2AA6665EAF9F8CBF9D380087B85D142F2D80F0F643DBFC2CAE38AD5383B0DBEB9BE02E7A4D8DDA02E112C173E96A88295987F966A814DBE87A060AE591F819D3904B4C9FABC10C860470CFBBB567C46DCA49C7840BC3798974CC7E51BE4F45EA503B241C0311A58E04FB1F97C0048443ED6EA8E5CA2AA17DEA7AC2C356C9E0E4AD98EAA514E30F26F9674D135E747F7452883FFAD53EB48775D62BD2EA8E9E434B648F557F2217D744A7C7DDCF412728B4E62D2770928A290F3E9039836FD1E6284721F1A73A9453A9E29F0A78E7913187F4C4569231A9ED974878D4C4AA20D8217D0D21B8C5B377D146C07F38BF938861B8EBE7F88869BBEB2A4B77AFA62E6B8ACE827EE7553DA49C7EFD7C5CF3FA4BC471519023081E983C0DC633C97C6248D35FD876559A1728F1B7C3FF3F99566720F05667F47C12ED06B2FBC9700FAB0D3473707A5B38984B2413730ECC3E00366BC47822E99DD4350539BD5EC18D154F30AD78101523AE68C701D8573D508182B1C0BCC0FC094CF03FC3A96FC86536EA86F62EBD6CCE97F57233C0AAB83E7542BBFB2CB73B2F804A80E414DFE4E9198492DC415F26C5E185D4CA8A686F9A49DAA570B00A882199A95F0CA86235F8CDB151733299AEC025C511498C34B651650C877AF155BC55211F0EEF05829C03265C2B647A955ED381BEFEBEB548DF12D4A461CE8F18F639C950D2358409C924C385FEA64C7F19148B62F2BB777D07C2740BD1E92DF1FC313640A47339BCB4ED8C530E0D88E5E112FC5A3D1BBCA17E4AD745B1613BC25071742E4A9AC683C7088F782C6ACF5CD38DC1D3B628727D36B2FF13B47A5754197B2EC637A7C2F2D1A8EC7D40D553F95F7FADD20482267F6B7B28FEF0F60D27295B2A54B68641D912648C0061101C18968CAF3262A457DD0C05DADB9549F34CD33039510FEA258F85425754015CFF0FB602398D4DABB144AB5B0381F97B91861DDD4437F3B6CF98EA5E7DC0C218F631C03EC3707B44262030AC2BAEE0DAB58FC75B82D78D9F62BDE494BB361E7451E62DEDF2F5367934848110F777E8FBBCEFBDD6AAD4311E094909DE3DBFB1F85615C57931E3C421814B0F9377883604B4AC0794C002E82BEA09164CCB6D2A23E817D4319A1BE60A7A65A51B69A544071C58CA705B5AA5B31641DDFC183E1EC80BD366548B56A1ECDE92D07A66F86A01B943EADD06F424DFF58CA1CCAA6D161F475EBE2972B75F31A82857E95F4ECEB867838A3461951D9C945CD4E6C30A43E9A50F5F7C6D5EBFD0FB996D10B99101B82EA5F4D44EAF641AEFF4EB8C5AF310DE2DC3195D608A1857D633DFBA1956BC5D5A89B40C437E4919178E037851E0A40C3002E52E9F75E0A0C6DD903B703178AD08770D5DF1688409C6A5A4EF967B8F6E9A601171EA6C90617DC9D9EAEA9A33911744F8D6866F3A0B2B9B67542F5092CB940BFDC966BF196238FBABC700F238E5CC76CAF6C1ED46067377A7464E836F4F1853ED12BFB74B0F3BFD0D19E9F88B3720460BD4A8BEB0CCEFD6ECD6BD683AB7007F7071BBCD2A4D1F47C954DBAC080F3BC318B92089E02968814A2917C7F35C3398BBA64C928ABC170BA5BB4455236B1B344F61DCE9182B1E75E3752999C7F939295B034C2E4964DE2A2547021297BA4DCB92EEB6B1FC8E5705C28D91B9D424C0F22A8B2E7F4ED2B10B3307E3597BDE1F1669A14079ECBFDFB602F9734C05191A80FABAD75DD0F383992615C5FE6534DF3B9E0138A362A4A27CADF27E881A458554B06BEAAA4DC1C97612AB0838E167DBD8B8916580BC7D1DD94065641D89B70EAB0FC83CDB5AE990BAE4FD24BD86FC2077E6AB9E463FCFBCE1D8E91A9E14E7BE4F6F7B229E25C973B17A1C4A3758DB01C93099297B06BC347B63E6F10D46ACAEC2434243FB1B692F26D9C0B960A11A9ADE0FADB52D572D14B28A4BE422A5479E8E44C7559D379667E444E16450BF219CCAACAD5B13034BA7394464316D8E1B3CD00778756E40A9BF9D0007843F63A61CD7DD7A3C11FEFB4D1507E290F35B6DF6C0806283FD88D4708A3490A69769D1B724C2845D5344CF0F9075455747C1B18E3D6B998F92845A2578EA34DCBC7E9A090F3FF64E28F7770E24FE75DA858AFEDAC00B1844037059C8CE0E9F9C9A5B1E574A7FB9E013856DF1BCA10086F6C1D25DFD123E07AC73F35E9AB9338BDB23A2975126DCD1562E90F42C49AC04B9E4F266FB97CE4B777550737239637FF574F291B25D5BA8D6CD4132409988C6B96976D233A806584BD36168331DF90A13E509C276468BE567B1F1BB304A80BA3C8099FD15EC8DF1C7DB5305CB48918E0629ED2E9B0EA2F2C41C4A728EE2E7C3D7F4058F6107CF2EF5DD2B903D1822B27655F1DC314800D91C6AC4A0746C6377FD7ED9018C65390C5A2B24DF7AC99C0E5973616AB1AD36CAA7B26FADA70D5FEA1CC8B639CADBBA097A068A57CDEBA1EC1933308B7EB6F3BC52BEA7BB6E51D7DD256AB04A0B5C49603B110E6C72BAC3D28D50F62DA3FF308E045EED3D49EFDCE1AD3E46E7F00CE6B35629A8AE022BC696D7C149A82E634E5BEEB07395F4795AC28A67E2170B9021B1DDCB924477A769D81C8E267536820256FD904E1C13B5D7129C49445B3ACC35B0962EE019C7304D3FF2A4477480511233AA5367F1ED8FA4A50057A00073EDB2E5C36F5B33149000D3B0EFBA628FFA1A3B15FC2B64C8653F73213BC83CBBBDFED2DDC711AF3CD03BF4B3771A12B1D3A11244E4B28AC0B76C8C51844E67F34F2249C1CA73474364C593CA5545E9FE873C206846BE4A1F8A861FEB0550E42522532C0A25472743AFB01259CB2268992CD70592D067268FBCC8D034F02180B3A7B5CD3C7FBE8C28F1FD9B19EEC895947FAAF96D70E2349DA31F839913F6B60159B746471CC1F8ED1AB7C28C83926514C5E424A53F420D3C6A45C4B1F918739F9A79CDF1259BF5686E16C234DB37263B5CE09CA647AF280F5F208DF2EFF39D3B4804177C357E852C50C1E4A152C521065F81B746DA0AB58BBD224F38AFC2C36DD0F076FE890DE1FEF9C1F96E14B5C248A211FBCF0A8EF21A8054AB74A0801094FAF317CED3F8AC7101FF0021BAD6EA87EA9A9FF7F34ABC58D90CC28BEC1F29FDE1BAAB72F1E9E564D85A2BF707E1FD279E4A25A981FA9FB1772BB134ED1A5AC8CCE065CF2B53DB3AB4357A07A12EBB99489880F603F173BF43BA784AF20F2B3B1A6AF2E81737A7D0D6CD677771A5C8B3F99F226C019292B15CDF5FE4BA4885C03CCA4B398C127730BEBC33B94ADCC721382D8467AF5CC8775767344177DECFAF861E0E4E8FBA53020C65CEFDBFA7A2F6F3E90B459F0E451ACAAAF0BF3D2268CDC86FA042369970D702F975C22E835734906ECCE8E771F9F100789AEE8766451184DA7B5EAE5C3EFAC6C01291EDB78193BD67A492AF8D483DBB07B4A08C9C9483917DAF58BF645AF41ADBFC1454103B2025C224DF8D314D28FA10E9478DE5FCC7D607D046D8C4706ABF1C5045A903CEEB1C906AB68075D9E43A88DABE4B7324F38A26F14CD6C650130FB4DC8719AE43B25023A3A6AB85381D49E29879B9358BA787EDC78DEB3BB92A215B1E44D5A4A0DBFFA68A7724C264EE92BF7899CD0212F43DC887025B42ACA4DF03506DC67D54E2345B2BA29CD9FDF666BA9BCB94738728590B3C97E4F8B39F18BE8E0B201672BB89C8354AC8F60E66C527E2EFFFC2919CBF1099CFF8B655A48DC468FBA3A287298BECFB9878049DFA9D2FB5E200D538F6AF070390DE33DF0F08BDA3BAE8ADC036BB324B1BFC3B181A083945430202898CBE21CA0059160B084B511E96428B70B442B848F7C5FA839F435B364D396E4946106556CE1F6C29B74D217A2DFEC4FAF133AE1338527C86921DC67A53095CAC1DB0523FD4B98642EFF44DF26A8FF156B74B24EBCD00A9D745C691D4AD41F4817FB69E51ADD216D3616B817426C07F4E09D6385C90C325F6D01960CB0E6694A069237593BBC34C7867DB3E2F05C7EC57B0E3B38150D1AFDD54735FAA13F3100DBE442E49975739202E3F3E7DD59F909C1096FD4F0FC4279709C19135B727B2E670F49456942605E266833D27BD40AC6AB10F402295741B2668238CEA30F6F6C01C177E2B5ED4AD8227879E958FA86435B6E0802323C47B4160BF1E1B2C46133BA47F283EE553544FB9BBC69E7CFDE52AA4ECE6E1F890F9DF5EE403FBA3F405E47DB4471C2F400369A09888A6AB6E7E2BD1DAE1AA57017AF922B51D28211018481A5C7D9287F9FFEDBE2DB0A9804A5915409059C97E22F3BEBEA147A925462F1548D9F5B491EF44D0A39D4BCFA1B63DBF0F86BBEEB95FC550A758B3EED72EC4F535F7609D2C9138D1B03254DD50C1E1DFC5E0AAF917104008C4E503160E3E9A25B03C5F79B1CAABEF5668D036CEFD22D292E9E47379AD3856A3DF6BC2339F8BFE9681DC834D8F2C113FEE100B495618CA6DAB2D6D8D5094E00F1204FF1A60D9C8F954B9B88302BCCC55D4EF220735730B6F45EA584FA60D432594B588E0CCFD2E7CF8C1B7C1C9C634EAF6DD4198F99FBE8933195F13C0A65AE87E941BB4AB863D0C3D3F2BE718249BA5391B41A08AEF1E7E1D4C6F5055B2FB1228F03847EA3A11D930418FA88AB7126D0DF06306465A1C453D4CD281758A0E932D75AFBFEA382ABA0BBC041E0865062CA8A7AEAEA5F49E236F567ED2A22DB0F9FBFB9B5246F9A5B2A26C06EC81E1058489A8E3FAAC820F9B2A81FA16CC89525B58946DED1BAE67404F45152009166CE7090A6C77A06C3D95C32005FB1B2ABA9B8C9E28FE70ED33C4D62E50E48136637E06E2991D5CE86F757B4C10F11EFE8FD0134D36A5318DD0A659AFFA522EACC77FAB1CAC70A7FC4311E039BE17BA5EA5218EF83B88EC152875A0ECF4FB7199B28BD20F7E02BF2499E11D6B1EBF245C3380BFFD49DEC1F364307E612A608F1CD038A8F7C78837C50859BD3DBE1AC26080B6E97DE1DF20A763AC11E4CC76BB6CAEE80D39391FADDABFBC06F0FA226756B91F378AC5C96E8E9EA535CBF36701AEF94732B49F2674D5FC102E216C0D1A0636294831EFEB1AB5E131451F23CF30BEB96CB22713EE3973C2EE52316B233C79BD2EC453ED2D7B56D5688C21341BF707CBDAD198BBB9D565801D75C01A9D47C39A4E52190C4D61F334618C5B94BCE0030FD377723BD8661184E53D3F2040C55A7B0F8B37026E2B423E0E7EBB5CA6CC910B4BFE7DD9AD282E7A05A7105EB6C08D4430DA8A88F9D4F06D24F0EF684054EA419AEC8E1B5A0F1F3FDF9E9C0D77C8733C0ACF97B785B67597B4568407DD7B8AE7DEE1BB2C4B80E05AE73E3C031178505A5AE46615167C1A8860A25DA1EDB86A4B85FA2437FE51FCF0B7BB5C6FE3DBE6D4C8499E269A421B8DAD20CF8C0D405616A5A665E0C1BBAB1012C10465F8C4B8B2E2C0F4C65BF707E2033028FCC295AA2DF0A238852F058AFF9C0CB4C2B273D9D19BD8460AA584EFED2A0364F18AE4B7F3623D16E1A998F7B96EB650567BAF95C9DD961DD0CA999577BA1D9E80EFC529AD3B9355BF446C4C37ADD600838111C0502D8967674650A08E3D920EF0EDDF6F7BB07CCF068F1FD79956FF9F3D7A58DEB42B618CF7079F4989CDF489E59B7F04E37F34C8C9F3F656A4C814841A6F06DB38B865AAC1DCF5188FC192692C1D0CA79F3F04F518DAD26186BA1C448E0EE1BB1BD95C3C346CC57E9F189A433E2F292DF435937FAF552BE1CC114D8F48E2C2A55040E486F4BB021053C45C5ABBCC1E84E18B059C706415FEF729465B89E58769EAFA49BAD88EE2AA2FBF919B065577C5ACF758CB1A236E7F2F1EC1630915D0A3C47EEC358BE90D00B90A09A65679A99A93BE73BD8E7C91977436910822195FC89965CF16AAD48213224540C31568FFA6468A1237E07AF2FCA678E2D6C012A9637B691DFA898DF0A9870D48A10FF99BB5B6F6EBBCE9CA1552D1E95B528EAB27C2F1F2ABF1B084B6123682F1A11413DAC92B7A8DE388FCA68FA93533EF8C50A73464AF3541C89E4864D2AB8B6034DEF40F2AA089B670CEC763A90249C83DA137FEEE13617B834694D6E90A794A0CE81E8BD74B630FC462B76F1DBB87A5CB67743E806208DE99468D8DAE6C4BB0489EB150DAE2E96581B53E2C712DE63C8F6B14246F3EA0428A7B326BC44EA1DB4A9316816B58B19D7CF8527E67CCF8F0113441744C41B7D53CA14DAFD2C290C28D167DC3F144F35A4137FC3929AFB54E07982F388C3E3324814365B2E5D15F144FE62CDCF88088A0D62747932577F67C058C1ED6F51EC839BB3AA36F57C284CB7BE1D738D0305B9A0FB88A13DF55A1DF6DC1B7C6FCD088AC8B572A9437B2DDB4FDF02CA7B64D63EABB653EDEB2639A6E533A19873C254D5F8CA8554F6D98CB543F70CA47A18AFB1F3313C979798865CCD865082572E0957F734AAC0B2E924D42BC0D5F27F2D783B74E00C3A384FD11E6ABE6D66DB7141AC2492A375D4B09BA87EFBCC062F6D96EBDD6C6E3F143BE30017A1212D8206151BF31BE3570F84265928A78F008D10D6BFECF864D40575AFE3E2B5439643D96D24A2ECA40DCC1DDBA41C190ED9BF97848AC2F3A4B21D97603E56D21929E40F6C2695735DEFF7C906556592631CAD46279D5F8932D4BAC6A6CF0A0EAADAD9E61C4A16B432AE65644295082EEA5B804AED840F37CBC79014BADD3D45358A4052F7994CEE529993D407502E92837A2D8E609623CB5EA4C506735B57FA01276C17A96C46ACF6FDDCE9E816CDB9D90D1B5AA904C6DE0144510B7F35F7790ACE292B18D26B686CF42913B436D2B9F50A82316E8844ED2548A8953540741AB39D75B50CC68B9A34AC6229AF914EF483FF62C1D64B4115D9AB7C71D4425AAE4AFECD599F1383643F4ABA5DA8CED3E9D9CF5E59C64483390BF46F0B60BFB9F9819F5B2AD110248E99EA06844210AC4E0C17C42679D5950DDBC68F3DB74C73A03C5DDB54C46983B06DB6DFC8460A3DAA289619FA4B69AA777B595CA0CB106FA07C9586AA527BE4D576F31C0ABB5180F556A8046F2E13B131A04ECE238CCE5CD4193A0AD0CF31D7C49764A781F25D27A01D68B85A6AFDC0F82735DF7C0AFF6F863AF7DA0DCB031B95961113724F636160DA6DA60B42DB1A1F8BB5D89272D9A42755CE30D32C460A555AEFCC207A685B8E5D167AEBC888544DB410FE3C2191833B4AA9593E5005E3FF0044DD9836CAC41616B88D78D6A709E20093C385FB9554E9856BF6D7E0890F3C3D397FCB56737041D197AB435A0CB3FF0BBE717FEFB1B17CE960407AB33613BF17C36B1B5828EBE73EC7936FA0962FF7AADA389B200D4DCEBB26F528981F4E2E00808263E52FCAFC8DB6A9BB1800E668E74D084CAE34769424DC22DDB01FF444D52D207CCF1D1335FD3B2D9E4E9D5970610073F352B1FF6483FF916C22FA1DA5B76577DF19F537ED97F9EF4D24CC7E749B8C2BDDCB4BA441E6E87D4E25F4ED83F96D68059EF94B3041B0AC8D8C047D2E8193E3810258C706E7906F10E1B40AB14D82D2F8658C40D570C89C0DF419006945208EB138446FAC850537A61480B69A53EE1E8CF0D9640380B00C204186581A5876942B98CD2DE56DD579D8E6D97CDFF175D47EDC4FA408EED2C02DDAB71C5542D57A3F3E6CF35876FC29F6911D987C367D91401461168FC27D5BE207878820D48ABF30684E7EDEA23961B8D126321881417154696C8CF5735DDA64FAA8C1D3C63228F8661A3C4F4F6E7C3F73BF9A50152D39B00B3EDFE215AE072796FC75456A40FCFEC17B98AF7FFC7DE557D7800864DD64CAC61383C9B07AFD41C118D27D224F145C8A98988559B6FC7B3DAC064E71903BE91BC24FBD4977A4F692DACC1C84B889927946A2EC8621500E1D4FFEF0EBD16BF08378D425EDDC18A3FDC2B7D4D3F2EDD85145B6EBBDB1870ED443082855F2668FD424CD3CE6918D432892F5568AC733A4C9CA6DD3FA0E8879ADF1A74E35AF0B7144772A478725C38A0B5EF3FA6976E689449AB39906AC16C8ECD2001BDC7D608505220E195B365D8A37AF9D0C7143D1AFECFA5B23E21BA10EF82E5197C08921E22212D0E486CC78B23F2F1B21462B49DBA8DB1836DCFDD06C1A2A7976E8553E3B9D91E7684EB86568B45A22A949D1720069FC4049395D56538BA8B4948683B2F0F1F9C34535B96ABA134C78133948DFAFC2B35467C1DD497E1016A8E3953DFB7EC40DE66FEB08C6556D67F6728C262AA0F4A1E226E265F5E3DB0E0A9652DF8466456BB0ED6C6BD746C3570EDB992CB4628FFD811E2D25AC9726AD72742879E25A11540F69BC955A57B93532EA930E60570A89C9AD9A5CC7E15FE9B89E81DD9265134938E3BDE81CA8646E193020DD337F8E1689761778E74400FB8F8068EB188A02FD59B617D7F849AC2A2FB16E082116D091D3A8019CC64BCA456F950B853F854C2C9F0786EA5F64678C071EF2CC1259F9DDE408EBBC804C74FB498E19E280D12C21EBE1203B557A0E3009D4B84A47C5344D5A1A27CB46513706BAB7033173715EF554DAF897F34943926615F3A86DCC186F9B7E4455FDBF5D2582DD9CCDE4E4F48DDC04832B13BEC01EA4FC12CB8F8AEB10F97F719C5B16420B85488BDB37655E6C65B7659D8D680D0BE83DD8F57C257ECF8B07875D072F2BCD5A351A963B39F2BA5D109D8EF523DDEE7F31C206B29D53CEDB5DA44ED1484C4D8A91BE0DBD8D6B87595C6BEF63BA2A12C3B9E3C064568425AD1F5881359E74E3F8FD620A905C48FE2FFAEE6D08E209C0287BC0AF018EF498274665E35B6796A7F9D49C42F08FE78B7AEE55AB17E09A2AC209A134DFC3C5F6C24E2BBF16FE9C03EC5AA0372C0D6198323131A3BC2659AD8CB996291F1E0067D5F20241B1716FE6093C38AD0E803AA2F849C165EF95F61D9A8F6A93A67BA206E070EE56ACE17C8D129A6669238235F2E21BBA316FEC96187AC1FE86B1AA8C38FBBA9D401183A30B23490C08BCBBB4F63AC5CA39980CB1ED672B6E520B71FC0D0246F72F9A327E717A4D0EC54B1E7A12FF395A2FF88DE4D9CE9A87CFCAFF22F3F200507A8386A168BDEA81CD1FFDDE0B27623BFC74D919FFE844D2A5FA9751E4283B98979F0EA73024C76937116AE6D05D65B109F5DDDA0794C837AE5C6B094A8C15A85976B40BD0C9C5E69560BC3A5B2AAFD315B3D5AE41B0418216BB233BD492E73BB0A027584FB2031E8C749654D38733D2F08B111AA27E1D105496129540BDDC821116D9A9F00BB8166FCC68CBC3FB78FCC00F19676B590BE2F139C1E1920460E6700C35F1837E6F47C7C8765F7F9D149EBD14EC17070134248054DAD7E511A7B221F258E2C2CF8221DC20AF8DA16AF01F2BDF41A46C55173134CF09634FDA71E12C66F7AFE66686B1B78047412E30AF3435BF429C248371661A434DB59AEF41E240214EA504B8F34A5CCD3DAF38B5507F2E5058FB8F8012E9AFD0B21EA4BACB4F4692B38ABC2FF33457F7012C9724F618B2CF90A1811F5DE3EC9D1EA9F89AF4607A542BEC60A4B25A8381A9A35F1A0AD1188EE97D9D3DD9D5CF3D037C35E73A250A41E9B6EB8889E43B2C0E04856E82D76F806F0DE391EB5A528BCA54A874C033C2E35BB5D95683EACA1A72BD6EB7F624A983A5FBD33054DF71A43BA3E5EFB4D341C7DD46F978515ADB3B16ECAE2FC2444FEB35EF6200B9700C1F64834B4DEE46AFA780AB049CFA01771317BDDC7BB488076766341B0125935D29BB7E78A023C03DD558A8721CB8465A10728F93C82156051DB3559BBF38BA7613D9CF4F6379E703447475DF694A3C4149809271F882F7E4F2CA96E83CF0928C561FCFB46682910410B2E713B1BEAAC3E984358E2E3BCAB4CC25D83276366CDD579ED40729EDAA506B1324BDB1ED91ECCB4F275F4B854E71895ADC027521EF66AFE43CC2699CE8B52DACB9CDD9193D80C040DBE491EE6E574049C069E2CC7C1D6F941A88BC08DCC32572AA52D6CF04439DC066F158D646168E61596721414083AB049D89C0A0D9796AA6040144293EBF1FF9293192426675BAB22EE81FA61F90CA1FC15474FE21FC33B06B083FFA8C14E0DE718E70B626B65FDA576A4084A5388940FD82EEEAEDA23D28FCE8DD8DCD05598E89A434D4FFF914B72E29DFAA5B3EF375B1A4EB8B96278DE2F5B3809188CFAAEEBB83699EACE1FA6CE6E8050CC03F5AA9BCEB47FDE9A5B7205BFA7AF96A1EC825EB040C49159CE20CB4C49AD84BA18078A73BE534A75902440394AB1F3E63E95A9DE0B2ACDBA9214377CA3D2123B1F5B2E59EA6A449833858CB80D2A78DCD1EF2A3D0CAF938D1EB88B44B9585341BD3D44CDE33D15A90D540E11406975B9CB3366EC0B96E4D4943847DEE66256CAA3B5D99D0A2C55C772339DB2C846C599B43B60CBE0CC7CCA7FB2EC4BEEB8DFC4994D18E2E42495C3F3B4DFCFBE8CAA36D770B700D069ADD23653EC8532CE97F2F7926CF90EAB88BB538AF7697A1F959E8023DA3DB21BD8F474D8397BA2F6E7EFB7DE453704C374BBB9F94C1757A0985B5C90F9F38AEEFD0BABE9F5BFE2F4151F43C2B0D8DD37CCB53378B07EC44276582484BFF71629272275501C10D522CABEEA69E8F5BB7FC4B12EC3B7D8C399331953B38F2936264F67DD37A39B8049E97CE676C94B79DB8413A304C120497EE2F8DBB19C04F520DE8DE20F972E1477F5B3487C53683D92D53F178BD8FA2528894CBFB1C1FB13B21C86674C789B772CB41616E7C1192C00C67A80225B761B15A44D93C258A7D89E2CC2F47635B51F1CC5B68CCB00CB806FF8D14E021FDA6A7180D02B2A0783070A4B25B9DA5579225CC16453B6C9B6F2C0900A555DD49917EDBCDD92D0E1BDE5E486458B8391D1F09B9C426BE71048A0B7433CD6CA9A1EC6BA30C7E50013FC8733B6AD8EAE24156ADC7FF0B92C75E7254B45329A25274F437FB2965D2B2FC2DC7B93AAC39B6FC04C83F35B4DE80E3802D7CB56457E3015CEAE4FB91C20DB145A6C0ED0E6EAEF8C7A5AC6289171412E96243C6A5617D4F2FFACFE6018757FDD209BB19D80F0CAE3D0B2F42341FA5D69CAFAA1385D9054289BA3F8A1B842B4875091E0ECE90EB04267728BC20EC533659B89D60308A1A24EA1CCBB9AE3F8BBC91934DB19819090CCE3C73D2703341C5D051C5B32361A75B2FA16F8514BD115F1DC0B9B160A39950DA41788213FB0E9418087A3D637E3F02E8E54307F1FFDC71D1AD0F9548E0354A561A55F2444C37C178FD17E991C6F57D2BE451CEF1B0E9019A2C4B4E9AA699DE804A60A64D911DB228590E31A8A0EAAEE7E4787DEA8F19726C3E9F572077863AD693A51B74E571B3BE196DC822DEE2D16D51E7235E88F3733485E8FF55EA07F0628733A620231B94ECFF9FC4F0939AFDD562985B6963FDBD04AD5C56AD2E999676F0B87649359DF98DA979177CB369C4F55B9BB14966C4E32235AE009F513A9EC3D587DBC6334F35FF87CFB259074BEAC510EA2F272FD44C488F28BB1890F0097A18E3D47FB0B888EFAEC07A9C55C8CF5065261D6399DB2EC9ECF68D67A321296CFB3C39AE491C741FFC822B674C24214515C75396B248167D38DBE15C502FE50CEE9EAA3E92AB011EA1599636CCBE00A8154BC4039F4EA97100018E1A5BCE992E7F97DFDDD5195E911B9AB42F360E42EB882330AC0494592B6D72A40E075FD598FAC17963299C13C0AF74D5D7DB24AE271FA4E0F7402DDCDAB3BB97329CD1ACFCEA1968E4EF92776CF16413AE26A90D8025D7D1BA8389E178EE4958F7E69F403CFFCE8F195731875522D2CEF624C5F5BFB8179512AF6BEEA777D1D3A238AA6976EC34AEC7F3A8EB46D61A1184F7B272526415181EB5438949E24BFE3C226DF7060329181B14EC8717C51643323F62F1259FF4812724C88F247E91D8DE8ABC427E6D64A41941BF334AB1CF080623FDDA760F332F84AE6C1E3C74E4CBDAE20F6381C000F1860C0BA83671A596A95634E97ADB5149DB9F719BB616E0C3570CFED7A35C6C6C2EC2346567ED833C31E0F0C740FAF28FDF2166159913A98D510B002A55779C6D9562449EC4B3874F2383412F44465956F8D996710593839645CFBB2AE6073B896A8CFEDB632F4A190C228A286B8F7DD4174A9C76B32F4EC67680FD106D3B421740C4EDE15C580D1AC3DD1C04D809E6FBE1471A31283169FFC16DF0EDA1638AF40CB0BEF59F699A12AE7F9709008B796E504B6BC92621013AB8631D344CD1D27C627A40AB51F4491C17342822CD53D3096508692F8639ABFE9DC3268BF3E9C6B927944585A291A88D63838827426C79338A0462F44F722622A89A1C02883ADABC8BC0D74AD1CA1616A42E4F69168AA5BBA32DED81ABEB96FA160538E832FAFE70EE6089272D4B58DBE85EB5125262C19CF7934510C6D97955D5CA0E28949DDE283A2EBFE8937B661D3A8E30781F6DE7AC9DBEA51067C7B544D489B88AFF04564C524AF66EB51D984D4DCFFEF9F37C0C07456D0991C4531909F85BA0A967B4AA5A4D796D21022861E6FBE9793BEFEE359E31A4D1C2AAAD0805225C028DF6FBDF6AD664D76BD106251925F43FCCC9BF6BF1C817C69E0335813B8F6C0E455DECDC2B5C00C6F5BF7C532E4C3B056FE92364EFFB6A77FBEEDECD5ABB7C0078AA95FEB96421831FE91EF5034F58518F8040FDCAF7443D0402D2F7AE389C69E2D2F5A2A50064AB8ABBB0375C8F900004F2FC510EE367516B565E163E5FBA3E9D84C4F98C7ECC0BC10919B0FE88FDB7E13A38C99E37B582679F8BD66FD0FE274658AA1CAEEC0115AD7EAF026C3476345F1115E81B61FF1502E3302B1771647BE7418C9FA76298A1ACA34D8D784F22DF66DB9D47CFC76DD82DE4ED50700036874DA49EFD130848B613BF330E9D2AA248C6636D5448200197168E3C44FF4C82C4CA959163D65558DD86C04626A84FBEFA6FC4215BB1A11551DD7487A1688BB07DA6EBFD02E1D65F59E8402EF7E851C817E9ECB26CAF63A211AC81C1E13D21C38E7F4FA5C14A50F975018613DFCD61E0E204C0546AD440DF12BE677401855E365FE907E12566BB45ACF3CEE84B5B68A408B93EF7952BE72C5D8CAEF0ECC948AE832403D03F6AC19FD260451C157E631BC32FF37C074A8A2FCF5244FAF87D5B1224C4AD847C8EED543847A00548C3FE58DB4D3396AA94D460A63213B077785B4C02CFFC7A8B97552F4FE1BC6AB1384EF0B1900FD819DE8753C76B4B6E73585F7A23CE58DD3E131EE43E237293B51FA775333C8282E7449D4D2A205514FEB7DE436530F73DCC962EA8DAE4B19807CE1FD99D27E873B9E73175617374FB3ABB754A5AC613756369CBB9345910BCBE7E9D6D9E68E019970E8B5F3F2C58D9DD282F3DCAF36DF487956EA4912335FB34178969C43C2D3A8CB84B4EBC86D50F2EAF5AEA9BDC4458664B1470BB3D7D540D73D07E9DD0F099F54206E229102C874A752046ABCE7FFA1ACF3EF3DFB495F34A1D10B6BD7C5EBA8AB4D4C8A2723CCB8865B8DDB0362133F2663530C2E6C478C116B1B1BFFB63824E7C148052820A9F87C905A9013E9FE19A7BEE6D5AAB55813E8B2481FE97CF6C6B358C7955855103718A7B520D90916975E99EB8CABE72C98E4AE62A5733780D5F8371BE240A25A3B7B72AF4FB388807F8EDAF672FC8D91E50778A7D7AE52D6CB593272AF394FD73FAF703437D336A8DE6CB02138174355FF9BB41FEEE47DAA52DF86E75CADED3A75AF02C286B1C20680635E2ED722C802C906E2FC528E92541047A45142971D6BB3FD2A2AE8F1D590335A812CA821560AFCEC066FCE9D1872AD4B7840308240DA2304274DFAD168A6BCD792BA22B7B93748CE2B8A5AD0C3EBED3FD83569A515297565693265DE5EF2AAE94E7542B28A1A40420F446DB502DD35838B5B5268EFCDD54E19BEB57CC3E94325CC0E14AD12ED26A02D5C5B5296F03490025E067FCD08D489C15D5C8BCA6939D5216813F80002F7A050CBDE0966A565449D8863202D9E2FF70A28D7978F8FB09BD7DB83D225C0451EFFEA42B92FB53370F1D82F7DEC9E0C20DD9CD6783637D0BD76EDE0AFCA3AFC9AC906A9D63650F80CCF1060C44343FC5423FDC46C86FD7EE5C49225E74E2A274AE5E4820CCDC1CA990349475A25440FC536314A59D37BE45613EFD6F1569759D9AD963217079D6F89781836415F4AB96EAE9AD529C7E839CABB0AB0DA485C7FF023AF48C66338092B6E1600DE5F139BEA3A8527EE9BC94A17C40F15B0B6BF5914CAC13B820E9B73DA52A165BFD28C639D9DE890C9124985CE81246E58390F927334C781357E4EDD3B1BB881BA01F14E1CB9A67182B284B5C2B00AE7F9A36BA8DC0F34A04802A7E307DAE76DBDC8B82D422F807CBD38311321F562ACC927136BE9A00C49A9100021A77EADBA9D29B11B147AAFBD0317EF25D3FB2F6FDAE0F0C8C23D4237AE23EB4B3E1B0273E8662EC460C707454DF639F957EC13B09BEBB13D55380A8CE9A1A6AF89EA7F86B1E7F2CCEE9A2334DEF31F3C80AC82EF37F5FF0021F7FC76794D07519ABCE2BB1F0D51501FE255F880BF5B8717FA479F38AD905B2A5493FF37489CD765C145BECCAD1EC769823B1054F96C9D6CB06AD92649845125B3B7AD804C6F114CA6B3911B94AA85D524816A39A66574EF610A9998BFF1CFD320BCE1043D86E4D0D2036965DC6B96527F2E3B6821AA58B3D4618E7336CA3A133EE3EFD33A12FFBCA3C139E41A1B3651A402AF9047AB6828BF44FDBC52B6FCB8D398827B0C497C6D700ED0DED0138F95D845D1FE03F82C02580035DB04ED78C79D55F98CFE51812373535C3E13E691C167B9551F59F45B14EF1BA48D3D84583612CAA45ACDA512E5ADCCFE82DE00C2DED729E7B4BD8B0DEBE0A137C55D60208D81DC6C71DA6EA5891F2624FF7D4C273314E3790C8F79075CA02E3C61DE7B5A3B774759AE3FF8F975D93E1311346D04765AEADCB91BBD51546DBC7E03F80A5D133DD42A2A7B6AF6D240FC3012E2AD8E5494B5D923FFF492B44DF8FD0CED2F28910A3D4E1D4D470178E9B35F3D8B705BB9C9C83E4C6CDA0BD1B41A0E6277FFE004C74CE2B96D7035183EA83338B87C9FED8E9AD503AA08ADCAEF3CC1301D66A3CEFE98581838B1BD6287CE0F157346CA074E7D52F32BFB7B0CA31A7EF29AF2FCE5F0CC89273D604B81540F801CB44201E1DAB058FAD1F65E8DFC676F3C782D3D4D4D381CDB3C0E00211F0CF48DE18A34423B1F482AF1BDB6DD9D27AFA04192605BA89849C5AA072C26305416808CD8AE562D3FD33F3637090B47F87C2C7F96DC1C29542D7D9E398C4D394CB042E14968F5DE253220C3CAFF5E4D958D7F647EE1B78AD733ED5665E980F5D199EFF663D86DE1C685C306951D76BCFBFE479750A9DCAC9D205475D3084AA3E71D9571DA07C47C53AA20C5334E86F77B692FAA343CCA42BFA67BF3A2FB4883173806796BAAD086310C9B7BC7034D1369A7F5ADE6C50E378D208BA5B2354F4CBFAEF56C3F857BA05A7A6E156351A9CECE9B0C9BA6D7F78786FB02C8595083133C2C27FE0C74429D755BD4A1F2FEFAFEE928655C5673718BA577B73548A2F286B4E453912E85CBCFC39CF41B446C76554B9653276417139B128658E733F229CCDFC20BB27BCD0AC1B215B5426C5DED8C155D2A11A7F722863A651CAACAE58A52899CD1299463914939AC8C7139A63DE471B2353B4C711E1C7912987D04AA9D6D10FDECC4FA78F06A8D5A62645E029BD12BB47CDAD34D5B96C0EEDC3F69983EE5DDD1B384E5285D1416FB221294BC08C7351CBA7BA879CCF3E280741A08CEC5C8F96107BA1BA28DA3DCDA7E05919A0648389DACB0A826DF9EA3DA8B0731DB0984E973C162F0385960AF48E9A667A5ACD56580F4918352AC157AA9838B02EE308FA82DC8FC3BB70D4E582C007FED5CCC6ECAAEA5345B9B1BAB2D2EFA275D4E8AA19860555BF0875DC83FDB9FFDBCC48B7B4C972D245B97019833D59060B72155E894A514A75D96DC5446C2F0FA24DD313D4943988DECEE7BF56F48FA4D04EBCCDDA7C109359B5598FFEB039627FD80F18DC2CF8491A80246CEFFA38686580FBE2D502A2CF4CA707FCB5F87F8882C95E3F806250A157A0CD4863CCE49F1E1C301DEB7321DA8DBF2457CB1760320981EE2D8420A6C3E33A9909C9352800946C71D550A64278D5BD183E3008BFBECD8FD1164541A75C39AF7F1D39CA548DDFFD0AD9B9A7BB83053DC90DF6E21FFA0273475095895EC00D34C15248919A97EEB045F5FEDBF90272738AE20BB1D3E16D159B826BCAA6650E45391997165B0D46979DEC468B745138599C2C6EA421DA30CCE952AEAC4445282ECD0260F696EB4778B1DBF6EC5AFD174B7332589A114B421163015601921A4F7376EB78C707FAE3B69898485A01FC0BC64B84198B2F5C88591EB38A70A18BD8A07E95B37333E65537C98FACCBDE22059143CF7CFAE3CA8FFB660CDBD553E2ACFC688177EAAF1A9FB4D82B833E60B0B321A788F59F848F4B992AC94E34317CB323E4641BF37AA88F09FBB297BBE1073F242171A4B27F0A1F0F5A83F63437F27BD2B2E14F0A4BD096E855F808DFC21B86FA638836C376A83F8CF441A4196B52F54E68CF86B1A99499A0895DB3E75399A74120C5BFA566973C53ED39FC3D0B8ABEB4A41645B3A17AAC8A1539C771453B0739A978862C5E4942B7BDC5F4333C0A3582F3A3F248B534A617A34C9E3EE0252BB2C3ADA9897EC1635C66E6AE47DD545532F95255DC08FBDCE3C7BF3A2A06BE2B6F74D99B83CCF7BD0420014DCCC1871172B006EA6304286694C00AF11E24FE295734CE1AA33B59E6027D0FCCF820F5B0A94C0BAE6D92B218A13D64739FE9022CA06FE09403ADA8FF830DFB754F0328B7948A72B0619B0132CB9E4C2130525F014C4244604B6F41340332C0FD035C642901614A07065B709352B23C247C22CAF18F632934D9D53B3820EC93BEEEC17E6DA59A880AB795B9C17CF3EAD6F02BFCE5893F1EA479F77C955AB9841F7D1EE1AAFF949552683944FE40567BF07F7D9496FF4CBDF2032627E327E40CFE96BB016238F34F6DB51047873C01A8BFCB37688A6FE5237F4548B73970D162606D178EFE5302AE07B55F4A828977A34251674F073566C4134DF542C1FB9DC9983D2A1825D26E2D33134704A1E65D81D1A5B6BB296EA13A98EC49348D1152EC6145405049CBCFC61A1A2D333759C20E1D8A892E9ECC4F52C6A6B2364633B208FF73DEBAC826E03BC08292108CA210DDDBAB25853C311E0C5ADAC40340201F3739D9CDF8EE6EFF7172F982ED119A7F4F10FC74E51EFA050FFDBDBB9676751E95C2AC4D64FFB766BA183CA2FED313269E0C9D2F8EE820F104077C63ED0AC3014857CBD4CF8B1FB0DFF8B02396E84CF572EF1EF14E8D9C1779EF6F7C686F206456303A7BCA3D7F668036859B609315B1D06E0D202047F5FD647488EE88672B195A7A39864DFAD17C1BC26B4D9BAF206A5193DD4A1B20AE99D9058BBBA76528593B39FC7AF4FC58FFF2E43BD78940C3EBF3023C9A4CAFFF87C6CA62C9E6C4769725225B119007958FF4AE2BE4ECCE625E46A47F6DA107FB049AA9F6A6DB8E0ECA8C097752B6CC75B60FEA0A2B3E0932BED0C0F995E7225C858F3F00BCB14A3498BDA6767F79AE037E5A61DDEE0BE4F956E1E3799F6A9C7CD30986BE55030E68391C3DBEE7CB0804BF2D7834908CEE9E4BC16E4FC85BCA6990B6EFB5DB6A91F821C5417372A7E22E80234BC806AEC15ABC4E5D60047AAA38AD7D200ECCDBC1AF1E744CE87B28F7497761436BC6D854DB6E48C69247014E97F43E5572D3533ABC595CD0B39A729AC44BC68EBE631C81D2B7C659B4C0DFF155CBAE47A86424B0879E4D9245C6DF2D167C2D5D192306F1E333C717C4FE87E6EACBD9607347CCFE1574E61F9D214922D8E07D79F31E7BFE576DC9112964F514B1232610EFB3E00A929E73C970470AEC8A23AB69378DFDBAAA9AFF5DDD43C15292C05DDD34588506327CAF30B8E526C3D1CD961FEDCA2E310F38601C3458F170C5C1C05FD037EF6BBBB0BB5508A0181FAF58F15196829EEEAF759733B9461AA32BA1D7DAB30582828CE172985DD3E92B72B87FCF4AC62A80715E62D1615045E341141C964018020AEE8AA53E91C7948854207A3F4EC668C59E0D4779003B9F35CAAD0B3A5A158223404377E1980C6852EC9E88E44924F94950D26A430AA7B4B281271906A9C33FA025B1FE2630E91ABDF446CAB0781DC20B9D41859D8CBA2B899BA846AE23E545010E3456563CD6CA6C5AFCB270483A3229A3A7224D0FAD317C0CD40030253DCE7796C40C942D802625B6B8B03D0C9C6BE3CEE1A755A53E91FA4071E0E2DBE88FCC0CC660B200E6ED5296CFECC61DB8E67F7801EB9F1FAECAECC540C78B3B368463E887391DCCF83A67EFBECB19E07175A283DC77955D17D9E4B60DDE7FF6FB815C2219257A96072D0AEE5EEA6D249BB76D34E627221D5495C1144838742F06AF8EFEDF217D1245A01A04F28507AE209A906C9E160C900C6548C2C9EBAD674F91DD5B9142C5176BE34EC8A045E5E36CB9AE49518884A4AADFF8A7DD84396A6290F8600F6AC41303BF78DEB7B56C50DC584A8D88DEE7CF11721644049B696FA7B0F5698D10416CF6A77312774A781CCADF04919021B8F066ED727FC2C9F32F90F0F083C5376C4CB43CCBFEB6E395416E344E1DAFB99A4D3A35455FA9D030AA76E3B27827038BB4C23B9D2314A975803C5ADB94D887B42D5BA6D3D578F5EB0567C2C2875EC04CF69E961CAF4214F596E8205E642FC7DEB1EEDC859486AC4A2C52200B3F9711B0B6C8A48BC46492107E116D6C1E053A9D80FA92651368253AF25F69C55234A7D8F6268E94F4CF8E15C70AD1E92453D2217FE3994FCAC982A407FCB190BB12325FB5538611A2C4B27A4B5F511FEB4702B49FFAEE3BF31AACE27560979EE023F6F24EEA8B59058893B0035DC5E0736162FBB0AE3E60AAF7806E560E1C89CD08DA11D4DCE8A471915588AA43D3E88FACC3D22057C09FD37A082D4504B70568BA79C22B4C0F96C5DD922A69326BB683EA4E8EC4B087EAB4DEE706C49D64E35188824DBA59B92513AAA05A58576A936754A46E0E676005030A5EC17A4E3F5F7DD59181B50C2CF2D871FE99303C044A8304116A8F8306D55C8BCB9B2A9355E7A630BB5FDF188DA0D5D4E6AF193D44EE1A4E1F64B8E9559DE21B15B8694C450669E3147F5A8BA1BA88244AAE8FC647812FA7E9C81A3D5D16DBF503F332CF66EA56F184475B8BE7B9C58C4B73A7A67FC125E22DE4B1A6B380C6AF2A78D084EA6EAD2608F1AC0D5B951F3C4C740143057BD1297E455D0B90C328E4A81C133D17610A2F0FECE2E9E669774BEB79BB318D853B4E08EF81C29F98D70F44B657E9E1109B1D302A7211F64D3DB865C3C009D7A4948C0A2D5EA8E0876C686FF90A9EAF5A66AD0E67AA83C853A0B17A4AADD448482AF53C3722B3E011A53038097056238D6636AF0616AFA18B9A62683F68063EA9B42A5B401DDF6D8C832CBC6BF85C25D97CBBCD5123C68209F2C0E38331116172E66416248B9A93ECDCDFD1AC9B7E7AA84C7F82D6ADFF131215592B5144CCC43B2DF6C4F818AD1014582BC345936A4CA39102CB0AEAEC70A618461A9FDA2F5BDA665C2ED596F40EDFFB3C57BE7C73FC324217B2FA25D099E0463EBDD1FBAABD88324CB17F246C162125A17B99C8865E42546CAF58BABF730D14E932E86B6E0D6EA07703F8249CED7A31E670FEABA8A2420D248A8D93BCDC8E61CF962758DFF195667CB326B54AEFA1D09219FE07F0F511DD6A8C214175D018379E4DB477D271DAD2E4475D97CC831899E8815B6CB3D908EDE2967784E1281CDDF35431674A1B2321D6B3529DC830FB0B854AEF2935669873925E175ED77A780A2936071E58763699EC1A673A8B09BAB7FBCD6E369B8009767A63FC33A813C52A469B7FB0FEA30C00E86211B4165D182EDC89307FC163930075CF0AC06F6F9CA7634AC425FCEEED495DFD2D8B284DCCEF8BB3229E5EC7BABBBB09EB19EF2BE5AF11178F20D4821E1A6682D818E5F34604700A1D415A6EB8BFA3C8F0122C279AB2EE580D325991EC95AD6739C4FBE7A4D9EA871FC5C63A95940D39C9CD76C2AC038FA8DBE786286211A63AB7133ED75F040FE75047221E674948CFDDA879CA8D3883EECE45AF387077B7FB32B1300463040CEA69244D0C5609DEF7A242088453EB3E3AF9C45ACB011EBF9047A41CF261512ED642647474A3FC14FBE0A6CAA65311D8B48EE2689BBAA7C9799B9890EBF0BE1E01E1AC42A39AE5B95F43053B00FB737A0B37C0E79BCE8512DCC69BE5C59BA1C73DD1EC0CE79347D00D5C6C02F4EB4DF68F9866ECD1402330F52B17E60E496037026E3578C570C0436F99C4F9D12D4305DC339B820DA7146FE980260DA4F7AC839F495A0228C48B91E4E9BD54B94716852AA0489E314EE0355440FC1DF5A693759D6B2C26DB01DC822009F1A5BA39D69B3D15F4CFA395E34E98ACA0C24375E54A1F9363DF3414D70FE012642CF279066EB7FEECC3CAC80FE5AE8D4B6B30D253A1765C389EB99FC1030DC361EAD44F3CDED4A6425C83BF5744BBEF7BDE729290890D4E74367A3B74F1A0A1ABED594F497E91855BD69A8995F38DA32476C04D10078AD6CDD8950620A3434A0E6B9F7F01CAC3D73C45A6202F1B6FD400F8E3305FBA0EC90DA8F39DD77E14E7594847C4DAECC9297D5E593AA42D971CF7C6DFFB802BCBEABACEBBC97CF01A74F433994DBD13E3E828C3F8347212F8991EFFA79FF855AB488AB18AFDE607ABE32B0D63568357D62F6ACF6B35CF317232DA3CB639F8FA65344BA8245595F22D6B96082011BD53C752A268087DD3E7F350F7956B1402B9D223B66140809949BE5A2BFF60CA1D6095FC48E8FF435021AC03230E23FEA84281712C55AE81EED7472AD7E622580735361975D4DDC01E42C70AE0522753AA25E72053C3D63DE680FA1D752B330EC73CC31E1AA4C014056F8BAEF948E3759E49E677D569BC47E5B8A767AAEA71CB24CEBCD0AF9D77F41C881045FAFC5EC7D6C1FBEC88D63D4DB21EDCB0F303D73ED6FB98E8ECB99B59E07D06E2400AAA61B5BF3E2D7224811C2D112B1698114CF585B056AFC9D1E019C7178F2DB776AF21C3A5909A2542C8016AFB462CBBEE716174FE7597533690E19AB7F0A8D48B2618808D78E76452CDE666BFFB9B34DEAD49A3E018E2807D3955AE0D4FB8C7D06078F6E0CCDFF928B92C3DFFA3DCD01752EF8713EE31DE19CE59E87D0C1C7521D53593BF34E48C632FCA07CE85B561FA9F30CF074C9668EB88142BB1B5943134E2B3F2283DA90257BCA125BB90E7D1D02FB6361F8C2053BE76F929BDD5DFFA7EA6449F650AFD58EB46EBC29E8A1EFA492FA6550FE306C2E135A92088CE76CF662DF2A62AB8998A0A925746AC3EF3762F0C9E3C11DF5024F8DD8AEE686B652B7B493D98EEF06EC7A022EFEB4BED3A2F514F472FDEE433A35EEDD1C606934A5DBEB5FAB647EED673F7A23CCC37ED63D997DF0B4AF9C3D96F1EB3557639D375F02F448CBB7F606C5795B75240724E9669D1246563080E7B9BE52CFA38160975F1685BDBE27C2F2B58F6FE44FAB3BB3EC4A204B110066A51B8EC93AAA530305AC50157F4E991091E515A6175936C44A30E074306C9901AF5F4D96D060866B9DD8DF8DCACD6F10E1341DA911BF96340FF765814851C2B4B8C47186D7D5BD9D1FC6CD65722F411C75D06E40665472D08CC5CA1013A4FF4FA185371172C201E364BE58037C79CDA2AA48CF7B38A473439338B508B49E21DFB1537C3CF89E0B732530D9EDD942F9F3BB3A0819FCD2DFE6B4E7C3283BA329EF5CC801BC35831171468A988985CACB22D49AB837C33D4CC18A800EA18100AAD8745ABF194A28E85B78C33B4CBBDC383CCC4F2892242390566D2DD2590A729CB30153E2D49389F44D411B609ABAD3A0EE38EC87E98CED2F9C651AF1EA0581D1C9F5322E559966DCADB276C09D86D4297A47EE0005A8573345ECB007537F9E9E2A2DC6F399A6454E1CCD7085468BEF314458880BF09A34A15766A1EFD24AD32B6E3597D6DF906E66CFF77E65A6A315001C319C15916B5EE8118E0FD581A07591630CD588C266E66826710651303B1AF09EBB48B698EFDB6391C5A291BE1530040E7638A816BE8A245A10720F3DD16427478A9CE0E50DBE25B708D50DFBD2351008B2AE49FA68393336298A58F8C212DDE78DC704382C34A39A31770A366E8D94A628B156FA67C534D8528F4141DBA8B988D2B4E8D07BEA275028FFA2CCAA72A28CF72649725835BC189EF5660BF65CF091C92BF2F1EFF71724D66CF1393E8BBD75E4610F387543E0DFD8521471D3A0FD676CB9E980BE2D2BFAE49072728310C86309C9BBC9EEE4924BE657ACFCEE8B32E988B7A7DAFB2C6FA87DE7F8504DBB0857A4C3587D28FE3C54A35350F5C80D1E0320E0906788CDD1FC919A095D41A125A99F2E4D3153F43D483EC1209245F968751273ED2B4FB0C5D31C81DE707DB46F5AC2728F8CA1207E022B05D15DE3EF2EC5DBB75517BFB334B8A5C50FFCAA5273A584A3B5330A928DD4E60EBF7B34A5D75767CD2263EF25665F1188DE44D13C8F4BA3B5FEFBB20C59CD12D292CD11E330C806E896A37772E6CD888B0F67FA08691123DDE9448527D37C1C82DA896EE7EF01CB2B4A9E845FA23C29377C5CC0C8F27FB9A77743DCDBF2ACE1B2EA37739248EB5253169F97B4D969830E3CB6D259942AD0CD6C798B88B146F381D05917A487A8B2EB09ECA7F2ACE68F9692FBD2710BC8C818D793CF29684003EAB06C143CFB109DBBB97FD23BDFB490586C92E14D34A5E136E2CC9D5CE3EF75321084942C8914F478740C4E8A68A4948852889F81A0824732DB2BFC6166251756E527F8CDDC03976BBCEA569F0EDA7BCF012134725A34E693B0113686A13E49D3185B75F771642D712016E23905DF2B67D1ADEA7370911760C50218D81CEAB9A85C1DDDFF09DBC63F835BE9BF8A3F76A7B9AE57D2BF2A27609AAC0D9CA4754C02B0E007507BD7B1115E3BD6887A26F438AD3FF7D8A4B1D01AF6A93483B923D4E28CF392E4EE6BB923785311BDD3CB1B8A8930BB7FDD80EDE03F663C2571E51FF029620F9B4186478FE9C52A71B9B357C8439A466FC05B5F3EEC051EC66E6126B52A4A7DC54CA53DB9D6ADEF66A9685D833DF8DBC71F75A88B3E33CC6A431CF3DAC39910CBEA00FF26B6C835DC1AD23AF2EA672711B184B0FFEAA1A5F9920BD344FCDB5EF7F300B2AA1DDE8718BB2B0D09EA85FBD53BEA06A4B54A60F3B6722F774A40DEE7C6A4C0D172623D9F8A45479E044A955C2D01213149C597443A0CA398F1F88B47385C612403FC432720CF48AE5B0180AB0012FB093EA2C9F3C58D91B5E34D6C19194EA677F4E28D878DB2DC0B168AF694CCD646EACA8E02E0E0F213AA8C543E781C0C30F268863EE5153AA251D5D52D33D5DE377D997003711395D708C4A6A6777035C2E998F30FE4436C70EAF155D7B5BFA0BFF65E2204D31DA4C336C701A33E452E8509B2FED09842161D9BA2EB1585F9AE768D47BA2B01205CF3E6C52E7A77CDADADAE78CBB361891A235E66B2A8BB7B6474B26C7D611A2F849747ABA1C39D579D0284DA0DE115E098520A3D39CF9858370232A28EE7D0FB24DF1E16C5C59AAA5B293A3359C221A1C4997DAB08C71E73419258418E2E4005E10B91C63BB407B80DFAF568B9ACB1D666A31D41317F8E0DAB2B72AB72D28B1BFF4C63B44ED4E7785B8BC9256C1BD451E7DC674A00E1A984DCC18D2236615B2FC780EDB4A442EC634D511C0AE94D8F82E998184681994BCB31A85FB79F302597EC00D611854C673555D96E1B8B95AF3C27F316136137201D7060071678ED3C924E79ADE0AA064937680A4550CCC1660CC86216DCE7B2A21D01B475936830C96E9202EF63ED2A91DE2D26C3C5E400DE9D73E143F47A178020BD40E6774E3341E2A5C3D8AC362B5DB2390C6EDFCE154BDE6FD194E4EFFE714DD1BD4BB23D5704B028FC6CBD58F1EB240F48BBADBA6D378BBC2C61154C4E793E314884D50E07C30B17867FF4F95B48ECCB8E2EB4DD189390BA3D9F9FF5A8C8DBC83ABE4F3C1FBDE4DD80D895CF470689B438C8CFD94321591134896A462FDBDF33D546F5825B2CBCA58A5B4042EE30DB0EFEB9A184B7ED65FE7A6F95F2F0DD3AAFEF2EDD269769717246C8144A5553AEFF89445655B073005C8877E01CB865A68C9CF67DED14BA6B9C8E1481EA535C3F5F7888FC56582712E94F65534E5945284D4A17583CFCF8AC5FCB861FAA0584DEBB9812569EA388592FD2B97E2A0D34C0A8561A2496A95E5FC34222639531861ABE089A902F3F0180C73D4F253FFD7ED6487F57241CDD623F94D9FFCD5B78FE193ED3BAD65EF50FEED2E88B76AF5BEAE4146FDACA23A4C0A9F0A678DB451DF4EDE60C4210B66FB561089427A1BF3E888554D22793D9FFB04B25A1AE9BC37C42E05071FF28E1F99519988A6B16C57A7B5649641EBD32833AA9A4DC2F8A895C4886DA51963B6B6CDE8700905E6532CFDA070A1CBC339DE40D9D9124E79A11BAB823D59E3DC1AD966FB451993A35AC0FD6BE089C4ACB69F2F6B8C9093ABE3EBA03B93F10EB6B5C5DD637C5E5CCF6BB55930F30B40A6C9EA204380030A826F6E72E31EB7F03321CF8EE26E5457D90F0597C4FA87F0913A'
            var encryptedHexStr = CryptoJS.enc.Hex.parse(enc);
            // 将密文转为Base64的字符串
            // 只有Base64类型的字符串密文才能对其进行解密

            var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
            //alert("encryptedBase64Str");
            var decrypted1 = CryptoJS.AES.decrypt(encryptedBase64Str, CryptoJS.enc.Utf8.parse("1234567890123456"),
                {
                    iv: CryptoJS.enc.Utf8.parse("1234567890000000"),
                    mode:CryptoJS.mode.CBC,
                    padding:CryptoJS.pad.Pkcs7
                });
            console.log(CryptoJS.enc.Utf8.stringify(decrypted1).toString());
            console.log(decrypt(enc))
        }
    </script>
</body>
</html>